fmap = liftM
Jul. 14th, 2006 06:05 pmТолько сейчас сообразил, что это одно и то же для ВСЕХ монад.
До сих пор думал, что они совпадают у IO и списка.
А вот дефолтную реализацию метода класса, от которого зависит определяемый класс, нельзя описать. А то можно было бы
Ну и хорошо, что нельзя. А то от Functor много классов могут зависеть.
До сих пор думал, что они совпадают у IO и списка.
А вот дефолтную реализацию метода класса, от которого зависит определяемый класс, нельзя описать. А то можно было бы
class Functor m => Monad m where
return :: m a
(>>=) :: m a -> (a -> m b) -> m b
instance Functor m where
fmap f m = m >>= (return . f)
Ну и хорошо, что нельзя. А то от Functor много классов могут зависеть.
no subject
Date: 2006-07-17 08:55 am (UTC)f fmap (a b) fa fb m m return b a b () a b (b a c) a c join m (m a) m a join mma mma id ma f join fmap f ma fmap f ma ma (return f)То есть, чтобы можно было задать instance класса Monad двумя способами: задать instance класса Functor и добавить затем return и join, либо же задать return и (>>=) (кстати, у тебя в посте опечатка: там (>>=), а не (>>)) и получить instance класса Functor автоматически.no subject
Date: 2006-07-17 09:49 am (UTC)Опечатку поправил, спасибо.
no subject
Date: 2011-06-20 08:08 pm (UTC)http://hackage.haskell.org/trac/ghc/wiki/DefaultSuperclassInstances
no subject
Date: 2011-06-21 08:40 pm (UTC)