Haskell - ошибка при исполнении - PullRequest
2 голосов
/ 12 апреля 2011

Я пытаюсь написать эту монаду

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)

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

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

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

большое спасибо

1 Ответ

6 голосов
/ 12 апреля 2011

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

...