gpt4 book ai didi

Haskell newtype,但保留旧功能

转载 作者:行者123 更新时间:2023-12-03 21:37:09 25 4
gpt4 key购买 nike

我想定义一种“理想”类型,它是一个列表,但有一些结构。数字前奏已经定义了 Ring 的实例对于列表,但他们没有使用我想要的加法和乘法的定义。所以我认为在这种情况下我应该说

newtype Ideal a = Ideal [a]

这工作正常,但现在如果我尝试这样做,它会给我一个错误,比如 take 5 $ Ideal [0..] .

有没有一种方法可以保留我想要的功能并且只覆盖我明确覆盖的定义?

最佳答案

如果您不太想完全自动化,您可以使用 the newtype package 中的实用功能。 ,例如类似于 over Ideal $ take 5 .

编辑:另外,顺便说一句,从 newtype 扩展功能并不难。包处理其他情况。例如,我有这些定义:

infixl 3 ./
(./) :: (Newtype n o) => (o -> t) -> (n -> t)
(./) fx = fx . unpack

liftN f x = pack $ f ./ x
liftN2 f x y = pack $ f ./ x ./ y
liftN3 f x y z = pack $ f ./ x ./ y ./ z

我怀疑这种组合器实际上并不是最好的设计,但你明白了。

关于Haskell newtype,但保留旧功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7184402/

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