Решил забавы ради потыкать haskell'ем MPD. Поставил с hackage libmpd, но не могу скомпилировать код в три строки:
import Control.Monad.Error
import Network.MPD
main = withMPDEx "192.168.1.102" 6600 "" $ throwError noMsg
Здесь последним аргументом в withMPDEx передается монада MPD, у которой, судя по исходникам libmpd, определен instance MonadError MPDError
Интерпретатор выводит:
$ runhaskell MPDError.hs
MPDError.hs:4:44:
No instance for (MonadError e0 MPD)
arising from a use of `throwError'
Possible fix: add an instance declaration for (MonadError e0 MPD)
In the second argument of `($)', namely `throwError noMsg'
In the expression:
withMPDEx "192.168.1.102" 6600 "" $ throwError noMsg
In an equation for `main':
main = withMPDEx "192.168.1.102" 6600 "" $ throwError noMsg
С явным указанием типов получаю более конкретную ошибку - «No instance for (MonadError MPDError MPD)»
Куда мог деться instance MonadError MPDError MPD, если я вижу использование того же throwError в исходниках libmpd?