[haskell] set comprehension
Как сделать сабж?Ну написать в хаскел-лист предложение синтаксис языка поправить, наверное, потому что так-то list comprehension - это syntactic sugar... Или я не о том?
Меня этот сет привел в уныние. Большинство операций начинаются со слов "
как сделать из Data.Set монаду
instance Ord a => Monad (Set a) where
s >>= f = unions $map f $elems s
return = singleton
fail = const empty
Ня?
Ня?Не ня, разумеется.
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.
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. В том вся фишка вопроса
http://hackage.haskell.org/package/rmonadТем более!
Firstly, import this module directly and use the NoImplicitPrelude extension so that do-syntax is rebound.а если мне захочется в пределах одного модуля пользоваться как Monad так и RMonad?
qualified, нэ?
qualified, нэ?do синтаксис будет работать только для RMonad, а квалифайд импорт обламается с do. Монады без do вовсе не так притягательны.
do синтаксис будет работать только для RMonad, а квалифайд импорт обламается с do. Монады без do вовсе не так притягательны.Для списков, Maybe и IO там определены инстансы RMonad. Ты можешь сделать то же самое для любой монады либо изменить Data.Suitable и Control.RMonad чтобы он делал это сам (вроде это можно сделать). Заодно патч послать.
Оставить комментарий
yroslavasako
Как сделать сабж?Либо же как сделать из Data.Set монаду и существует ли в хаскеле монад компрехеншен.
P.S. Вопрос тролля: почему даже в черезжопнутой скале есть сет комперехеншен, а в светочи ФП хаскеле его приходится придумывать?