创建Haskell实例声明

2 haskell declaration instance 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
Run Code Online (Sandbox Code Playgroud)

我一直试图创建一个声明,如:

instance Show D where show = Stack
Run Code Online (Sandbox Code Playgroud)

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

C. *_*ann 7

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

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

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

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

{-# LANGUAGE TypeSynonymInstances #-}
instance Show D where show _ = "Stack -> Stack"
Run Code Online (Sandbox Code Playgroud)

不过,我不确定它在实践中有多大用处.