Я определяю экземпляр монады следующим образом:
data Something = Something a
instance Monad Something where
return a = Something a --Wraps a in 'Something', correct?
m >>= f = do
var <- m
return $ f var --I want this to pass var to f, then wrap the result
--back up in the 'Something' monad with the return I
--Just defined
Вопросы ->
1: Есть ли явные ошибки / неправильные представления о том, что я делаю?
2: Уилл Хаскелл знает, как вызвать возвращение, которое я определил выше из m >>= f
3: Если я по какой-то причине определю другую функцию
f :: Something a -> Something b
f x = do
var <- x
return $ doMagicTo x
Будет return
вызвать return, который я определил в экземпляре монады, и обернуть x в Something
?