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
该RMProg和Register类型的功能.一般来说,函数无法以任何有趣的方式显示.你可以通过导入得到一些东西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)