我正在Haskell中编写一些程序,处理很多基本类型,如Word32/Word64等.我使用ghci来频繁地测试函数,在终端中查看结果.
为方便快捷,我总是以十六进制显示数据,例如
data Human = M Int | F Int
instance Show Human where
show M x = printf "man, age %d" x
show F x = printf "woman, age %d" x
Run Code Online (Sandbox Code Playgroud)
但我希望基本类型以十六进制显示(特别是在ghci中).我发现实例声明无法覆盖.而且我不想像他们一样扭曲所有人:
newtype MyInt = MyInt Int
instance Show MyInt where
...
Run Code Online (Sandbox Code Playgroud)
它看起来有点愚蠢.
我可以修改baseghc 包中的一些代码吗?我只想让一切都变成"十六进制".我只想要ghci显示"hex".我怎么能实现它?
由于我们所有人都同意覆盖Show不合适且不切实际,因此欢迎 任何"更好地以十六进制显示ghci中的数字"的答案.
假设我们有自定义数据类型:
data Person = Person { first_name :: String,
last_name :: String,
age :: Int
} deriving (Ord, Eq, Show)
Run Code Online (Sandbox Code Playgroud)
我们还说我有这些Person数据类型的列表.我已经创建了一个按顺序对这些人进行排序的函数,但这仅限于每个人的第一个值first_name.我要做的是修改Person数据类型,以便此sort函数按年龄而不是first_name排序(除了交换值顺序以便年龄是第一个).我知道我需要使用instance关键字为Ord 编写自己的比较函数.这就是我被困住的地方.谁能帮我吗?
编辑:是的,这是硬件 - 不幸的是我需要按照我描述的方式来做.