Monad IO -> MonadPlus IO (haskell)
От: Аноним  
Дата: 19.02.08 04:47
Оценка:
Знатокам haskell-я и монад вопрос.

Есть функция:

applyFirst :: MonadPlus m => [(a -> m b)] -> a -> m b
applyFirst fs x = foldl mplus mzero (map ($ x) fs)


Теперь, хотелось использовать ее для списка функций FilePath -> IO Maybe SomeType (первый аргумент функции).
В связи с этим попытался объявить IO, возвращающий Maybe (IO Maybe?), экземпляром класса MonadPlus,
например, так:

instance MonadPlus m => MonadPlus (IO m) where ...

Проблемы возникают с kind mismatch. Вот и не могу сообразить, как это сделать.
Возможно ли это и как?
Почему IO m не имеет тип * -> *?

Если же не возможно, то как, тогда можно элегантно использовать функцию applayFirst для
указанного выше списка функций. Или, все же надо переписывать саму функцию для работы IO Maybe...?
Re: Monad IO -> MonadPlus IO (haskell)
От: Аноним  
Дата: 19.02.08 06:57
Оценка:
Тебе нужен трансформер монад MaybeT. Посмотри на hackage. После этого ты сможешь юзать MaybeT IO b, которое, по сути, и есть IO (Maybe b), и является инстансом MonadPlus.
Re[2]: Monad IO -> MonadPlus IO (haskell)
От: nlv  
Дата: 19.02.08 10:25
Оценка:
Спасибо, буду смотреть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.