在这里完成了对Haskell的菜鸟,这可能是一个更加低调的问题。我正在尝试让ghci输出工作,并且我坚持实例声明。我如何声明“(Show(Stack - > Stack))”的实例给出:
data Cmd = LD Int
| ADD
| MULT
| DUP
deriving Show
type Prog = [Cmd]
type Stack = [Int]
type D = Stack -> Stack
我一直在尝试创建一个声明:
instance Show D where show = Stack
但我的所有尝试都导致了非法的实例声明。任何帮助和/或参考文献非常感谢!
答案 0 :(得分:7)
首先,默认情况下,类型同义词(即使用type
定义的内容)在实例声明中不合法。但是,有一个GHC扩展允许这样做。
除此之外,在这种特定情况下,show
需要返回String
;你的实例试图返回一个...类型的同义词名称,开头时甚至没有意义,除此之外还引用了Int
的列表,这是show
的错误返回类型
最后,D
是一个函数类型 - 无论如何应该是show
的内容?在大多数情况下,对于函数类型的Show
实例,你真的没有多大意义。
如果你只是想说“这是D型”,你可以写一个这样的实例:
{-# LANGUAGE TypeSynonymInstances #-}
instance Show D where show _ = "Stack -> Stack"
我不确定在实践中有多么有用。