Маленький хаскеллист попал в Зазеркалье и, преодолев неисчислимые препятствия, дошел до последней горизонтали. Белая и Черная Королевы говорят, что для того, чтобы стать SPJ, ему нужно пройти «Королевский экзамен», ответив на Черный и Белый вопросы: всякий ли Functor является Rotcnuf? всякий ли Rotcnuf является Functor?
class Rotcnuf f where
(
Read more... )
Comments 9
Reply
Reply
Reply
Reply
Reply
2. mfap не предлагает гарантий сохранения алгебраической структуры, так что, fmap нельзя выразить
Reply
newtype F a = F (a -> Void)
instance Rotcnuf F where mfap (F abv) _ = F (\b -> abv (const b))
Reply
{-# LANGUAGE FlexibleInstances, UndecidableInstances #-}
class Rotcnuf f where
mfap :: f (a -> b) -> a -> f b
instance Functor f => Rotcnuf f where
mfap = flip (fmap . flip ($))
=> Любой Rotcnuf это Functor. Но не наоборот. fmap никак не выразить через mfap - у тебя есть объект типа f a, а в mfap нужно подать f (a -> b).
Reply
Reply
Leave a comment