Ниже приведен пример из Haskell tutorialДолжен ли связать результат с Монадой?
instance Monad Maybe where
return x = Just x
Nothing >>= f = Nothing
Just x >>= f = f x
fail _ = Nothing
Однако, я смущен Just x...
линии. Должен ли результат не быть монадой? Я бы ожидал, что линия будет
Just x >>= f = Just (f x)
Подсказка: какой тип 'f'? – duplode
Чтобы добавить подсказку @ duplode, если '>> =' были реализованы так, как вы предлагаете, это ничем не отличается от 'flip fmap'. На самом деле это * точно * разница в мощности между '>> =' и 'fmap'. –
Другими словами: 'f' уже позаботится об этом - он создает значение типа' Maybe b', то есть 'Just (y :: b)' или 'Nothing'. Если это не так, код не будет проверяться typecheck. –