lomeo: (лямбда)
Dmitry Antonyuk ([personal profile] lomeo) wrote2006-12-04 07:13 pm

Про трансформеры

Хорошая статья про монад-трансформеры для тех, кто ещё не понимает как с ними работать:
Monad transformers step-by-step

Re: читаю

[identity profile] nealar.livejournal.com 2006-12-05 11:54 am (UTC)(link)
Чем от type отличается? С помощью type делается вообще точная копия, а не только bottom.

Re: читаю

[identity profile] lomeo.livejournal.com 2006-12-05 11:55 am (UTC)(link)
тем, что при type - тип тот же, но синоним, а здесь другой (например можешь для этого типа сделать другой инстанс какого нибудь класса).

Re: читаю

[identity profile] nealar.livejournal.com 2006-12-05 12:28 pm (UTC)(link)
Про инстанс я понимаю. А в жизни это зачем нужно? Вот тут у них, типа, конструктор свой, поэтому стандартных инстансов нет, так что, newtype используется не за этим.

newtype

[identity profile] nealar.livejournal.com 2006-12-05 01:02 pm (UTC)(link)
Похоже, для экономии. Памяти под конструкторы или ещё чего-нибудь этакого. Я StateMonad писал через data - и ничего, работала. А у них через newtype.

Re: newtype

[identity profile] lomeo.livejournal.com 2006-12-05 01:09 pm (UTC)(link)
Мы вроде type уже обсуждаем, а не data? Для data всё понятно - эффективность, тип то тот же самый остаётся.

Re: читаю

[identity profile] lomeo.livejournal.com 2006-12-05 01:07 pm (UTC)(link)
Имхо, потому что синоним не позволяет полморфные типа, в данном случае не опишешь синоним для r -> m a.
А newtype позволяет определить тип со своим порядком следования полиморфных типов. И тогда мы можем сказать типа Monad (ReaderT r m) или MonadTrans (ReaderT r). Может быть за этим?

В смысле, описать то type MyReaderT r m a = r -> m a сможешь, а вот instance MonadTrans (MyReaderT r) хрен сделаешь, если я не ошибаюсь.

Re: читаю

[identity profile] nealar.livejournal.com 2006-12-05 01:16 pm (UTC)(link)
Да, GHC не даёт. Я, правда, не понимаю, как он это обосновывает.

Re: читаю

[identity profile] lomeo.livejournal.com 2006-12-05 02:19 pm (UTC)(link)
ХЗ, сейчас на ru_lambda спрошу.