我正在尝试实现一个通常将列表的第一个元素放入 monad 的函数,但如果 monad 是一个列表,它会返回整个列表:
putInMonad :: MonadPlus m => [a] -> m a
putInMonad (s:sx) = return s
putInMonad _ = mzero
putInMonad [1,2,3] :: Maybe Int
应该返回Just 1
,并且
putInMonad [1,2,3] :: [] Int
应该返回[1,2,3]
。
有任何想法吗?