我正在使用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
但是我希望基本类型以十六进制显示(尤其是在ghci中)。 我发现实例声明不能被覆盖。 而且我不想把它们全部包起来,比如:
newtype MyInt = MyInt Int
instance Show MyInt where
...
看起来有点傻。
我能在ghc的包base
中修改一些代码吗?我只想让所有东西变成“十六进制”。我只想让ghci显示“十六进制”。我该如何实现?
编辑
由于我们所有人都认为覆盖Show不合适和不切实际,任何一个“更好地显示ghci中的十六进制数字”的答案都受欢迎。
p = putStrLn . myShow
并在每行前加上p $
。 (顺便说一下,自从你发表评论以后,我已经更新了我的答案。) - ehirdp
对我来说已经足够实用了。 :) - wuxb:set -interactive-print=myPrint
来替换 ghci 中默认的打印函数。将其放在~/.ghci
文件中,可以始终覆盖默认设置。 - Michael FoxZipList
定义自己的实例(比自动deriving Show
给出的表示更短),尽管在hackage上列出了Show (Ziplist a)
实例!这可能是因为Control.Applicative
没有定义这样的实例,它必须在Text.Show
中... - imz -- Ivan Zakharyaschev