Haskell:显示类型为::* - >*的数据

Jul*_*n S 2 haskell types show

我有一个问题是为类型的数据类型实现一个show实例

这是代码:

data RMcom = LOAD Int | STORE Int | CLOAD Integer | CADD Integer | 
             CSUB Integer | CMULT Integer | CDIV Integer | ADD Int | 
             SUB Int | MULT Int | DIV Int | GOTO Integer | JZERO Integer | 
             END deriving (Eq, Show, Read)

type RMprog = Integer -> RMcom

type Register = Int -> Integer

data RMstate = State {progr :: RMprog, pc :: Integer, reg :: Register, maxReg :: Int}
Run Code Online (Sandbox Code Playgroud)

它是Registermachine的模拟

所以现在我想自己创建一个Show RMstate的实例.

Normaly我会这样做

instance Show RMstate where
   show(State progr pc reg maxReg) = show(progr)++show(pc)++show(reg)++show(maxReg)
Run Code Online (Sandbox Code Playgroud)

但是编译器希望有一个Show RMprog和Register的实例,但是我如何为类型创建一个实例呢?

提前致谢

aug*_*tss 10

RMProgRegister类型的功能.一般来说,函数无法以任何有趣的方式显示.你可以通过导入得到一些东西Text.Show.Functions,但它可能不是你想要的.

我建议你使用newtype这两种类型并编写自己的Show实例来做更好的事情.

例如

newtype Register = Register (Int -> Integer)
instance Show Register where
    show (Register f) = "Registers:" ++ show [(i, f i) | i <- [0..15] ]
Run Code Online (Sandbox Code Playgroud)