[haskell] set comprehension

yroslavasako

Как сделать сабж?
Либо же как сделать из Data.Set монаду и существует ли в хаскеле монад компрехеншен.
P.S. Вопрос тролля: почему даже в черезжопнутой скале есть сет комперехеншен, а в светочи ФП хаскеле его приходится придумывать?

apl13

Как сделать сабж?
Ну написать в хаскел-лист предложение синтаксис языка поправить, наверное, потому что так-то list comprehension - это syntactic sugar... Или я не о том? :ooo:
Меня этот сет привел в уныние. Большинство операций начинаются со слов "Возьмите чистую тарелку Ord a =>".
как сделать из Data.Set монаду
instance Ord a => Monad (Set a) where
s >>= f = unions $map f $elems s
return = singleton
fail = const empty

Ня?

alfadred

Ня?
Не ня, разумеется.
Monad - это класс с одним параметром m :: * -> *
http://hackage.haskell.org/package/rmonad
Once you have made your type an instance of RMonad, you can use it in two ways. Firstly, import this module directly and use the NoImplicitPrelude extension so that do-syntax is rebound.

yroslavasako

Kind mis-match    The first argument of `Monad' should have kind `* -> *',    but `S.Set a' has kind `*'    In the instance declaration for `Monad (S.Set a)'Failed, modules loaded: none.
Монады должны быть определены для всякого типа a, а не только для Ord. В том вся фишка вопроса

apl13

http://hackage.haskell.org/package/rmonad
Тем более!

yroslavasako

Firstly, import this module directly and use the NoImplicitPrelude extension so that do-syntax is rebound.
а если мне захочется в пределах одного модуля пользоваться как Monad так и RMonad?

apl13

qualified, нэ?

yroslavasako

qualified, нэ?
do синтаксис будет работать только для RMonad, а квалифайд импорт обламается с do. Монады без do вовсе не так притягательны.

alfadred

do синтаксис будет работать только для RMonad, а квалифайд импорт обламается с do. Монады без do вовсе не так притягательны.
Для списков, Maybe и IO там определены инстансы RMonad. Ты можешь сделать то же самое для любой монады либо изменить Data.Suitable и Control.RMonad чтобы он делал это сам (вроде это можно сделать). Заодно патч послать.
Оставить комментарий
Имя или ник:
Комментарий: