6

我正在尝试完成Typeclassopedia中的一些练习,但我无法定义自己的 Monad 实例[],因为我似乎无法隐藏它。我能够Maybe有效地隐藏,但是当我尝试隐藏时[],出现此错误:parse error on input '['

我正在使用这行代码来导入:

import Prelude hiding (Maybe, Just, Nothing, [])

更改[]([])也不能解决此问题。

我不知道该怎么做。任何帮助都会很棒!谢谢!

4

2 回答 2

10

您可以尝试-XNoImplicitPrelude,但最简单的方法可能是定义您自己的List类型,其语义等同[]于该类型并实现您的实例。

隐藏实例是不可能的,甚至import Prelude ()导入实例也是如此。

于 2012-08-17T19:09:42.303 回答
4

本质上,列表语法是神奇的并且是内置的。在创建 Haskell 时,列表被认为是如此通用且非常有用,以至于它们需要特殊的方括号语法以使它们更加方便使用。因此,您无法使用与内置 相同的语法定义自己的列表类型[a],同样您无法隐藏[]语法,就像您无法隐藏关键字一样ifor where。这不会阻止您定义自己的列表类型,定义与内置列表类型之间的转换函数。正如其他人所指出的,为自己定义列表函数既不是很困难,也很有教育意义。

当然,您也可以Monad使用相同的签名定义自己的类,然后使用它。

于 2012-08-18T22:40:28.563 回答