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...?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.