lomeo: (лямбда)
[personal profile] lomeo
Только сейчас сообразил, что это одно и то же для ВСЕХ монад.
До сих пор думал, что они совпадают у 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 много классов могут зависеть.

Date: 2006-07-17 08:55 am (UTC)
From: [identity profile] migmit.livejournal.com
Интереснее было бы иначе:
  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 автоматически.

Date: 2006-07-17 09:49 am (UTC)
From: [identity profile] lomeo.livejournal.com
Да, так еще лучше. Вот только не могу представить, как сделать это так, чтобы не было конфликтов.
Опечатку поправил, спасибо.

Date: 2011-06-20 08:08 pm (UTC)
From: [identity profile] migmit.livejournal.com
Хм-м-м?

http://hackage.haskell.org/trac/ghc/wiki/DefaultSuperclassInstances

Date: 2011-06-21 08:40 pm (UTC)
From: [identity profile] lomeo.livejournal.com
Надо же, спасибо! Посмотрим, может что из этого выйдет.

Profile

lomeo: (Default)
Dmitry Antonyuk

April 2024

S M T W T F S
 123456
7891011 1213
14151617181920
21222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 17th, 2025 06:57 pm
Powered by Dreamwidth Studios