Знатокам 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...?