我正在尝试完成Typeclassopedia中的一些练习,但我无法定义自己的 Monad 实例[]
,因为我似乎无法隐藏它。我能够Maybe
有效地隐藏,但是当我尝试隐藏时[]
,出现此错误:parse error on input '['
我正在使用这行代码来导入:
import Prelude hiding (Maybe, Just, Nothing, [])
更改[]
为([])
也不能解决此问题。
我不知道该怎么做。任何帮助都会很棒!谢谢!
我正在尝试完成Typeclassopedia中的一些练习,但我无法定义自己的 Monad 实例[]
,因为我似乎无法隐藏它。我能够Maybe
有效地隐藏,但是当我尝试隐藏时[]
,出现此错误:parse error on input '['
我正在使用这行代码来导入:
import Prelude hiding (Maybe, Just, Nothing, [])
更改[]
为([])
也不能解决此问题。
我不知道该怎么做。任何帮助都会很棒!谢谢!
您可以尝试-XNoImplicitPrelude
,但最简单的方法可能是定义您自己的List
类型,其语义等同[]
于该类型并实现您的实例。
隐藏实例是不可能的,甚至import Prelude ()
导入实例也是如此。
本质上,列表语法是神奇的并且是内置的。在创建 Haskell 时,列表被认为是如此通用且非常有用,以至于它们需要特殊的方括号语法以使它们更加方便使用。因此,您无法使用与内置 相同的语法定义自己的列表类型[a]
,同样您无法隐藏[]
语法,就像您无法隐藏关键字一样if
or where
。这不会阻止您定义自己的列表类型,定义与内置列表类型之间的转换函数。正如其他人所指出的,为自己定义列表函数既不是很困难,也很有教育意义。
当然,您也可以Monad
使用相同的签名定义自己的类,然后使用它。