gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:30:58 24 4
gpt4 key购买 nike

我在为具有类型的数据类型实现显示实例时遇到问题

这是代码:

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}

它是 Registermachine 的模拟

所以现在我想自己制作一个 Show RMstate 实例。

通常我会这样做

instance Show RMstate where
show(State progr pc reg maxReg) = show(progr)++show(pc)++show(reg)++show(maxReg)

但是编译器想要有一个 Show RMprog 和 Register 的实例,但是如何我可以为类型创建一个实例吗?

提前致谢

最佳答案

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] ]

关于Haskell:显示类型为::* -> * 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21935510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com