gpt4 book ai didi

haskell - 实例声明的模式匹配错误

转载 作者:行者123 更新时间:2023-12-02 05:14:25 24 4
gpt4 key购买 nike

我需要为特定数据类型声明一个 Monad 实例:

data M m a = Mk (m (Maybe a))

instance (Monad m) => Monad (M m) where
return x = Mk (m (Just x))
Mk (m (Nothing)) >>= f = Mk (m (Nothing))
Mk (m (Just x)) >>= f = f x

但是我得到:

test.hs:6:7: Parse error in pattern: m
Failed, modules loaded: none.

它可能很简单,但我想不通!

最佳答案

类型变量 m 不是您可以进行模式匹配的东西,尤其是为了区分 JustNothing。想一想它对代替 m 的不同可能类型意味着什么——在许多情况下,这样的模式匹配是完全不可能的。

要编写该实例,您需要这样的东西:

instance (Monad m) => Monad (M m) where
return x = Mk (return (Just x))
Mk mx >>= f = -- ??

请注意 return 用于创建 m(可能是 a) 类型的值——这是可能的,因为 Monad m 约束,在一般情况下(完全没有约束)没有办法创造这样的值(value)。

要实现 (>>=),您需要做类似的事情,同样为 Monad 使用 (>>=) m 的 code> 实例。

顺便说一下,您应该考虑对M 使用newtype,除非您有特定的原因需要data。大多数时候,如果您可以使用newtype,您就应该使用。

关于haskell - 实例声明的模式匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14879328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com