相关疑难解决方法(0)

重新定义monad列表实例

我试图使用newtype重新定义monad列表实例以创建包装列表类型,以便允许完成此操作,因为似乎无法覆盖Prelude定义.

到目前为止,我有以下内容:

newtype MyList a = MyList { unMyList :: [a] }
    deriving Show

myReturn :: a -> [a]
myReturn x = [x]

myBind ::  [a] -> (a -> [b]) -> [b]
myBind m f = concat $ map f m

instance Monad MyList where
    return x = MyList [x]
    xs >>= f = undefined
Run Code Online (Sandbox Code Playgroud)

作为Haskell的初学者,我无法知道如何为实例定义>> =运算符,使用我的函数来定义bind.

myReturn和myBind函数是否应该使用MyList而不是普通类型变量?如何正确定义>> =所需的包装和拆包?

我陷入了映射f的函数参数,其中f :: a - > [b],但似乎我需要f :: a - > MyList b,但是map不会接受它作为参数.

为混乱道歉.所有帮助表示赞赏

[我知道这里有一个类似的问题:重新定义列表monad实例,但我担心我不能按照那里的答案.]

haskell

1
推荐指数
1
解决办法
167
查看次数

标签 统计

haskell ×1