相关疑难解决方法(0)

如何覆盖Haskell中显示某些基本类型的实例?

我正在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中的数字"的答案.

haskell overriding

5
推荐指数
2
解决办法
3384
查看次数

在Haskell中按特定属性对自定义数据类型列表进行排序

假设我们有自定义数据类型:

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 编写自己的比较函数.这就是我被困住的地方.谁能帮我吗?

编辑:是的,这是硬件 - 不幸的是我需要按照我描述的方式来做.

sorting haskell

5
推荐指数
1
解决办法
3239
查看次数

标签 统计

haskell ×2

overriding ×1

sorting ×1