Сперва пример. Вот такая программа на хаскеле вычисляет и выводит ответ на жизнь, вселенную и вообще:
import Control.Applicative
main = print $ answer succ 0 where
one = pure <*> (pure :: a -> b -> a)
inc = (<*>) ((<*>) <$> pure)
mul = (<*>) <$> pure
h = mul <*> inc
answer = h . h . h $ one
Аппликативный функтор характеризуется наличием
(
Read more... )
Comments 20
Reply
Reply
Reply
inc = S mul
а посему, h = inc inc
как же так?!
Reply
С чего бы?
Reply
inc = S (S (K S) K)
mul = S (K S) K
Я тоже как-то не мог понять, и в виде mul a b f x = a (b f) x этого не видно.
Зато раз x можно "сократить", то выходит mul a b x = a (b x) (даже больше: mul = (.)), а inc n f x = f ((n f) x) = mul f (n f) x
Полиморфизм!
Reply
Prelude> let h = inc inc
Prelude> (h . h . h $ one) (+1) 0
42
Хотя типы ghci выводит разные для inc и s mul.
Reply
Leave a comment