2011-04-12 8 views
2

Я стараюсь, чтобы написать эту монадуHaskell - ошибка при выполнении

data W x = W x [String] 

instance Monad W where 
return x = W x [] 
W a h1 >>= f = case f a of 
    W b h2 -> W b (h1++h2) 

Но теперь, когда я буду использовать эту монаду и попытаться написать возвращение или >> = в коде я получаю по компиляции предупреждений:

Отсутствует явный метод или метод по умолчанию для Prelude.return в объявлении экземпляра. Отсутствует явный метод или метод по умолчанию для Prelude. >> = в объявлении экземпляра.

Кто-нибудь знает, как исправить это предупреждение?

спасибо

ответ

6

Предполагая, что расположение кода точно, как показано в вашем вопросе, проблема заключается в том, что ваши определения return и >>= не отступ, поэтому они определяют как новый топ-уровень функции, не связанные с классом Monad. Отступы их, и это должно сработать.

+0

:) Большое спасибо, это решение – 877

Смежные вопросы