创建Haskell实例声明

时间:2010-04-21 21:37:59

标签: haskell instance declaration show

在这里完成了对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

但我的所有尝试都导致了非法的实例声明。任何帮助和/或参考文献非常感谢!

1 个答案:

答案 0 :(得分:7)

首先,默认情况下,类型同义词(即使用type定义的内容)在实例声明中不合法。但是,有一个GHC扩展允许这样做。

除此之外,在这种特定情况下,show需要返回String;你的实例试图返回一个...类型的同义词名称,开头时甚至没有意义,除此之外还引用了Int的列表,这是show的错误返回类型

最后,D是一个函数类型 - 无论如何应该是show的内容?在大多数情况下,对于函数类型的Show实例,你真的没有多大意义。

如果你只是想说“这是D型”,你可以写一个这样的实例:

{-# LANGUAGE TypeSynonymInstances #-}
instance Show D where show _ = "Stack -> Stack"

我不确定在实践中有多么有用。