보통 모나드에리스트의 첫 번째 원소를 넣는 함수를 구현하려하지만 모나드가리스트라면 전체리스트를 반환합니다 :모나드 타입에 따라 다르게 작용하는 하스켈 함수
Just 1
을 반환해야
putInMonad :: MonadPlus m => [a] -> m a
putInMonad (s:sx) = return s
putInMonad _ = mzero
putInMonad [1,2,3] :: Maybe Int
및
putInMonad [1,2,3] :: [] Int
는
[1,2,3]
를 반환해야합니다.
아이디어가 있으십니까?
하위 모나드로'[[]] Int'를 사용할 수 있습니다. –
@WillemVanOnsem 아니요. 'return s'표현식에'sx'에 대한 정보가 없으므로 없습니다. 단순히 구체적인 반환 유형을 제공한다고해서 도움이되지 않습니다. – chepner
@chepner : 예, 특정 모나드에서는 다르게 동작하지 않을 것입니다. 나는 그 문제를 다른 방법으로 해결하기위한 아이디어 만 가지고 있었다 : 아이템리스트가 아닌리스트리스트를 제공하라. –