LINUX.ORG.RU

Вышла книжка по функциональному программированию на Haskell

 ,


3

5

Григорий Макеев выложил в свободный доступ книгу «Основы функционального программирования на языке Haskell».
Скачать можно тут.

>>> Подробности

★★★★

Проверено: anonymous_incognito ()
Последнее исправление: cab (всего исправлений: 1)
Ответ на: комментарий от anonymous

Попробовал скомпилировать. Оно захотело lens. Пробую установить:

$ cabal install lens

...
...
...

[23 of 79] Compiling Control.Lens.Zoom ( src/Control/Lens/Zoom.hs, dist/build/Control/Lens/Zoom.o )

src/Control/Lens/Zoom.hs:62:1:
    Alas, GHC 7.0 still cannot handle equality superclasses:
      Zoomed m ~ Zoomed n
    In the context: (Zoomed m ~ Zoomed n,
                     MonadState s m,
                     MonadState t n)
    While checking the super-classes of class `Zoom'
    In the class declaration for `Zoom'
Failed to install lens-3.8.7.3
cabal: Error: some packages failed to install:
lens-3.8.7.3 failed during the building phase. The exception was:
ExitFailure 1

Вот и завязывайся на lens в production.

Попробую другие версии, может сработает.

rtvd ★★★★★
()
Ответ на: комментарий от rtvd

Попробовал ещё одну версию:


Building lens-3.8.0.1...
Preprocessing library lens-3.8.0.1...

src/Control/Lens/Each.hs:5:14:
    Unsupported extension: DefaultSignatures
Failed to install lens-3.8.0.1
cabal: Error: some packages failed to install:
lens-3.8.0.1 failed during the building phase. The exception was:
ExitFailure 1

rtvd ★★★★★
()
Ответ на: комментарий от rtvd

Если честно, я впечатлён:


Building lens-3.8.6...
Preprocessing library lens-3.8.6...

src/Control/Lens/Internal/ByteString.hs:40:8:
    Could not find module `Foreign.ForeignPtr.Unsafe':
      Use -v to see a list of the files searched for.
Failed to install lens-3.8.6
cabal: Error: some packages failed to install:
lens-3.8.6 failed during the building phase. The exception was:
ExitFailure 1

$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.0.4

Кто-нибудь серьёзно считает, что haskell - серьезный вариант для работы?

Ну а вообще, я в шоке, но всё ещё не теряю надежды собрать lens. Заметьте, я даже не пытаюсь подобрать версию lens так, чтобы её зависимости подошли другим зависимостям какой-то программы.

rtvd ★★★★★
()
Ответ на: комментарий от rtvd

то есть тебя тут слушали, давали повод вставить слово, а ты в итоге даже ленсы собрать не в состоянии?

гхц обнови, дебил

anonymous
()
Ответ на: комментарий от rtvd

Ты серьезно рассчитывал получить какой-то полезный выхлоп нажимая cabal install lens на 7.0.4 или это шутка какая-то, не пойму?

anonymous
()
Ответ на: комментарий от rtvd

Я считаю что Вам пора завязывать с «работой» против ФП.

Почему используете старые версии? Похоже на манипуляции и подтасовку, Вы же специалист, а у меня - новичка в ФП, lens, да и любой другой код собирается без бубнов:

# eix -I dev-haskell/lens
[I] dev-haskell/lens [1]
     Available versions:  (~)3.7.3(0/3.7.3) (~)3.8.7.3(0/3.8.7.3) **9999(0/9999) {benchmark-uniplate doc doctest dump-splices hoogle hscolour inlining lib-werror old-inline-pragmas profile safe test test-doctests test-hunit test-properties trustworthy}                                                                                                                                                                                                                              
     Installed versions:  3.8.7.3(07:38:13 10.03.2013)(doc hoogle hscolour profile -benchmark-uniplate -dump-splices -inlining -lib-werror -old-inline-pragmas -safe -test -test-doctests -test-hunit -test-properties -trustworthy)
     Homepage:            http://github.com/ekmett/lens/
     Description:         Lenses, Folds and Traversals

[1] "gentoo-haskell" /var/lib/layman/haskell

eix -I dev-haskell/lens
[I] dev-haskell/lens [1]
     Available versions:  (~)3.7.3(0/3.7.3) (~)3.8.7.3(0/3.8.7.3) **9999(0/9999) {benchmark-uniplate doc doctest dump-splices hoogle hscolour inlining lib-werror old-inline-pragmas profile safe test test-doctests test-hunit test-properties trustworthy}                                                                                                                                                                                                                              
     Installed versions:  3.8.7.3(07:38:13 10.03.2013)(doc hoogle hscolour profile -benchmark-uniplate -dump-splices -inlining -lib-werror -old-inline-pragmas -safe -test -test-doctests -test-hunit -test-properties -trustworthy)
     Homepage:            http://github.com/ekmett/lens/
     Description:         Lenses, Folds and Traversals

[1] "gentoo-haskell" /var/lib/layman/haskell

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от anonymous

Проблем со сборкой Вашего примера не увидел:

# ghci animals.hs 
GHCi, version 7.6.2: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( animals.hs, interpreted )
Loading package extensible-exceptions-0.1.1.4 ... linking ... done.
Loading package transformers-0.3.0.0 ... linking ... done.
Loading package MonadCatchIO-transformers-0.3.0.0 ... linking ... done.
Loading package array-0.4.0.1 ... linking ... done.
Loading package deepseq-1.3.0.1 ... linking ... done.
Loading package containers-0.5.0.0 ... linking ... done.
Loading package nats-0.1 ... linking ... done.
Loading package semigroups-0.9 ... linking ... done.
Loading package comonad-3.0.1.1 ... linking ... done.
Loading package tagged-0.4.4 ... linking ... done.
Loading package transformers-compat-0.1 ... linking ... done.
Loading package contravariant-0.4 ... linking ... done.
Loading package semigroupoids-3.0.2 ... linking ... done.
Loading package bifunctors-3.2.0.1 ... linking ... done.
Loading package bytestring-0.10.0.2 ... linking ... done.
Loading package distributive-0.3 ... linking ... done.
Loading package comonad-transformers-3.0.1 ... linking ... done.
Loading package mtl-2.1.2 ... linking ... done.
Loading package comonads-fd-3.0.1 ... linking ... done.
Loading package filepath-1.3.0.1 ... linking ... done.
Loading package pretty-1.1.1.0 ... linking ... done.
Loading package template-haskell ... linking ... done.
Loading package generic-deriving-1.4.0 ... linking ... done.
Loading package text-0.11.2.3 ... linking ... done.
Loading package hashable-1.2.0.5 ... linking ... done.
Loading package parallel-3.2.0.3 ... linking ... done.
Loading package profunctors-3.3 ... linking ... done.
Loading package groupoids-3.0.1.1 ... linking ... done.
Loading package semigroupoid-extras-3.0.1 ... linking ... done.
Loading package profunctor-extras-3.3 ... linking ... done.
Loading package reflection-1.1.7 ... linking ... done.
Loading package split-0.2.1.2 ... linking ... done.
Loading package unordered-containers-0.2.3.0 ... linking ... done.
Loading package primitive-0.5.0.1 ... linking ... done.
Loading package vector-0.10.0.1 ... linking ... done.
Loading package void-0.5.11 ... linking ... done.
Loading package lens-3.8.7.3 ... linking ... done.
Ok, modules loaded: Main.
*Main>

Deleted
()
Ответ на: комментарий от rtvd

lens-3.7.6 собрался, но с сообщениями типа

src/Control/Lens/TH.hs:669:10:
    Warning: orphan instance: instance Applicative Q
[35 of 58] Compiling Control.Lens     ( src/Control/Lens.hs, dist/build/Control/Lens.o )

src/Control/Lens.hs:69:5:
    Warning: `cloneLens' is exported by `module Control.Lens.Type' and `module Control.Lens.Loupe'

Понятия не имею, насколько это критично. Попробую собрать программу завтра. У меня уже глаза вытекают.

rtvd ★★★★★
()
Ответ на: комментарий от Deleted

Я считаю что Вам пора завязывать с «работой» против ФП.

Я считаю, вам пора уже врубиться в то, что я работаю не «против» а «с» ФП.

Почему используете старые версии?

Все версии можно назвать старыми. Вот почему вы не используете версию из репозитория. Свежачок ведь.

P.S. ghc-7.0.4 идет в поставке Fedora Core 17.

И не надо мне рассказывать сказки, что пора обновить OS и ghc c ней. Это только у задротов принято переставлять операционку каждый день.

rtvd ★★★★★
()
Ответ на: комментарий от rtvd

Согласно http://www.haskell.org/ghc/ 7.0.4 был выпущен в 2011 году, думаю эту версию уже никто не поддерживает давно. Однозначно надо обновиться. На счет чиха, то в gentoo он выполняется на раз-два-три:

layman -S && emerge --sync
emerge -uDN world -p && emerge -uDN world
haskell-updater

Deleted
()
Ответ на: комментарий от rtvd

Правильной дорогой идёте, товарищ!

Попинайте мэйнтейнеров ленсов, чтобы и ghc-0.29 поддержали заодно. Невозможно пользоваться.

dmitry_malikov ★★
()
Ответ на: комментарий от rtvd

Никогда не понимал все эти нападки на Fedora. Нормальный же дистрибутив.

dmitry_malikov ★★
()
Ответ на: комментарий от dmitry_malikov

может приводить к unexpected behaviour в случае, если импортятся разные инстансы для одного и того же типа. Причем в целевой программе даже предупреждения не будет.

qnikst ★★★★★
()
Ответ на: комментарий от rtvd

линзы 3.7.3 должны ставиться с ghc 7.0.4, возможно нужно будет исправить: sed -i -e 'template-haskell >= 2.4 \&\& < 2.9' 'template-haskell >= 2.4 \&\& < 2.10' lens.cabal

щас проверю в коробке с 7.0.4

qnikst ★★★★★
()
Ответ на: комментарий от dmitry_malikov

ладно, в любом случае survey собирался пилить..

qnikst ★★★★★
()
Ответ на: комментарий от anonymous

Ты на Трескина посмотри. Эрланг, эрланг!

А что я должен у Трескина увидеть? Заброшенные им ресурсы? Или речь не об этом специалисте http://maxtreskin.moikrug.ru/ ?

Deleted
()
Ответ на: комментарий от rtvd

http://hpaste.org/83791 решение (используются линзы, как коробка с ghc-7.0.4 обновится, я проверю собирается ли там), возможны всякие косяки и можно проще, но с этим я щас буду разбираться.

qnikst ★★★★★
()
Ответ на: комментарий от anonymous

Больно нужно. Я к тому же вообще программировать не умею.

dmfd
()
Ответ на: комментарий от rtvd

Если честно, я впечатлен:

Человек с проблемами с хаскилем сидит на федоре(!) с гхц 7.0.4(!) и не может собрать ленсы сам (!).

Все-таки, основная проблема хаскиля (особенно в россии) - это его пользователи.

P.S. Кстати, все нормальные люди сидят с lens-3.9 из HEAD, шутки совершенно непонятные.

anonymous
()
Ответ на: комментарий от anonymous

Все-таки, основная проблема хаскиля (особенно в россии) - это его пользователи.

Он не в России, судя по профилю... так что правильно сформулировать, видимо, «проблема хаскиля (особенно у пользователей из россии)».

anonymous
()
Ответ на: комментарий от anonymous

Здесь собрались спецы по haskell-platform, может подскажете где можно подробнее почитать об успешных проектах с использованием pandoc для конвертации на лету LaTeX в wiki и html(5). Сложность задачи в том, что авторский LaTeX потенциального заказчика содержит макросы, которые pandoc надо научить обрабатывать в процессе конвертации. Эта задача теперь один из моих проектов, и не уверен что я смогу ее самостоятельно решить в течении ближайших лет :). Собственно в ФП я и пришел через эту задачу, т.к. альтернативы достойной для pandoc (код у pandoc простой и очень изящный) не обнаружил, первоначально для решения задачи рассматривался Perl, но увы - готовых доступных решений на Perl этой задачи не обнаружил, а после углубления в pandoc пришел к выводу, что Perl значительно хуже подходит, чем Haskell, к решению задачи конвертации LaTeX в другие форматы.

PS. То что ЛОРцы пишут здесь по-русски, еще не значит что они из России, и тем более не значит, что они продвигают ФП. Мне показалось, что в этом треде всё направлено на опускание ФП, особенно в России, и самой России.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 3)
Ответ на: комментарий от Deleted

Мне показалось, что в этом треде всё направлено на опускание ФП, особенно в России, и самой России.

Охуеть

То есть всю дорогу два уёбка флегматично подристывали о тонкостях академической ебли их любимым обожаемым хаскелем. В итоге, один ленсы пытается поставить с мохнатым гхц и обиженно надувает губки, другой вообще какой-то пизданутый и кроме `eix` ничего по теме сказать не может.

Сельские авторитеты, не иначе. Ебала жаба гадюку.

anonymous
()
Ответ на: комментарий от Deleted

в этом треде всё направлено на опускание ФП, особенно в России, и самой России.

Ты больше всех для этого сделал есичо. Я и не думал, что родина способна таких дебилов рождать.

anonymous
()
Ответ на: комментарий от bsdsarealldeadandrotting

ОК. Поставил новый ghc на отдельной машине, собралось.

Ну во-первых код действительно хорош. Явно лучше всего того, что я видел раньше как по лаконичности, так и по читабельности.

Возможно что с этой библиотекой линз можно писать код почти безболезненно.

Но всё же есть некоторые странности.

1. Попробовал добавить ещё один тип и линзу:

data Cage = Cage { _animals :: [Animal] }
makeLenses "Cage

и получил ошибку

    Multiple declarations of `_animals'

Как и следовало ожидать, никакой магии нет и makeLenses объявляет «animals» (видимо из _animals) что приводит к конфликту имён. Точно также само ведут себя haskell records, так что не удивительно. Это не смертельно, но неудобно в долгосрочной перспективе.

2. форма записи

animals %= (over mapped $ age +~ 1)

кажется несколько более запутанной записью чем

for(Animal a : animals) a.age++;

но это видимо с непривычки.

3. попробовал перенести объявления типов и линз в отдельный модуль. Пришлось каждую линзу для каждого поля явно объявлять в списке экспортов. Не критично, но слегка неидеально.

module Types (
        Sex(..),
        Animal(..),
        Food(..),
        EventIn(..),
        EventOut(..),
        World(..),
        age,
        sex,
        hunger,
        life,
        points,
        animals,
        foods,
        gen,
)
where

А вообще - очень неплохо.

rtvd ★★★★★
()
Ответ на: комментарий от qnikst

Что до интересов enterprise и интересов разработчика - предпочитаю чтобы они пересекались. В первую очередь, потому что это денег больше приносит без побочных эффектов вроде злых менеджеров с палками и быдлокодинга.

А что до ABI, то мне не совсем ясно, почему его так нужно ломать даже если не меняются сигнатуры экспортируемых штуковин (типов, функций, etc.).

rtvd ★★★★★
()
Ответ на: комментарий от rtvd

почему его так нужно ломать даже если не меняются сигнатуры экспортируемых штуковин (типов, функций, etc.)

а почему его нужно не ломать?

anonymous
()
Ответ на: комментарий от anonymous

А бан по IP адресам на LOR бы не помешал.

Против сельских жителей ничего не имею и даже больше завидую им, не нужно травиться гадостью из супермаркетов :)

Deleted
()
Ответ на: комментарий от rtvd

1. makeFields (с хаскильными рекордами проблему не решит, ленсы могут иметь одинаковые имена)

2. animals . mapped . age += 1

2. makeClassy

anonymous
()
Ответ на: комментарий от Deleted

Ты Gentoo держишь в production? На скольких машинах? Обновляешь часто?

Я вот держу кое-какой софт, и не обновляю его уже больше года, даже на минорную версию. Потому что всегда есть риск. Плюс надо читать гору release notes и changelog. Может у тебя времени много, у меня его нет.

rtvd ★★★★★
()
Ответ на: комментарий от Deleted

Fedora :) Смените дистрибутив, я забросил шапко-продукты еще в 2003м.

Ты вообще очень толковый чувак.

Поэтому тебе платят в месяц 100K RUB в месяц, а некоторые другие люди получают порядка 200K USD в год. И тоже программисты.

rtvd ★★★★★
()
Ответ на: комментарий от dmitry_malikov

Насколько критичными могут быть ворнинги об орфан инстансах?

Понятия не имею.

rtvd ★★★★★
()
Ответ на: комментарий от Deleted

Я скорее обновлю OS несколько позже. Но не раньше чем через пол года.

rtvd ★★★★★
()
Ответ на: комментарий от rtvd

да, зачем обновляться, вдруг сломается?

anonymous
()
Ответ на: комментарий от anonymous

Бывает полезно для избежания круговых зависимостей файлов.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.