А вот кому трехпараметрических типов

Apr 03, 2013 14:20


К завтрашнему занятию задачку со звёздочкой сделал, а то некоторые больно умные последние 15 минут практики бьют баклуши, решив всё заданное.
Введём следующий трёхпараметрический типовый оператор, инкапсулирующий композицию однопараметрических конструкторов типов:
newtype Compose f g x = Compose {getCompose :: f (g x)} Каков кайнд этого ( Read more... )

fprog, сборник задач и упражнений по хаскелю, haskell, fp

Leave a comment

Comments 14

migmit April 3 2013, 13:32:20 UTC
Я для таких вещей обычно использую TypeCompose.

Reply

deni_ok April 3 2013, 13:54:48 UTC
Мне там нравится имя unOO в

newtype OO f j a b = OO { unOO :: f (a `j` b) }

Reply


udpn April 3 2013, 17:35:01 UTC
А почему без доказательств?

Reply

deni_ok April 3 2013, 17:40:08 UTC
По просьбам трудящихся дополнительное задание: докажите, что реализованные вами представители удовлетворяют всем законам соответствующих классов типов.

Reply

udpn April 5 2013, 15:07:37 UTC
Ура-а-а! Спасибо.

Reply


sassa_nf April 3 2013, 18:17:56 UTC
"(<*>) = ???"

а вы студиков "pointless" функции требуете сочинять?

Reply

deni_ok April 3 2013, 18:29:48 UTC
Нет, не требую, они сами предпочитают. Там место оставлено перед =, чтобы фломастером на доске, куда это проектируется, образцы писать :)

Reply

sassa_nf April 3 2013, 19:02:05 UTC
ага, значит, не 9*2 :)

pure = Compose . pure . pure -- красиво
fmap = (Compose .) . (. getCompose) . fmap . fmap -- ой...
(<*>) = (Compose .) . (. getCompose) . (<*>) . ((pure (<*>)) <*>) . getCompose -- выдыхай, бобёр!

Reply

deni_ok April 3 2013, 19:06:13 UTC
Как мне подсказывают студенты в http://deniok.dreamwidth.org/50419.html здесь был бы уместен liftA2.

Reply


Leave a comment

Up