gpt4 book ai didi

haskell - 在 `a` 上使用 `newtype a` 的函数

转载 作者:行者123 更新时间:2023-12-02 04:52:03 26 4
gpt4 key购买 nike

假设我有以下newtype:

newtype Foo = Foo 整数导出(Eq、Show)

是否有一种简洁的方法来添加两个 Foo:

(Foo 10) + (Foo 5) == Foo 15

或者获取最大值:

max (Foo 10) (Foo 5) == Foo 5

我很好奇是否可以轻松地将 a 的函数用于 newtype a 而不是这样做:

addFoo :: Foo -> Foo -> Foo
addFoo (Foo x) (Foo y) = Foo $ x + y

最佳答案

正如 haskell98 知道如何为您派生这些 EqShow 实例一样,您可以打开 ghc 的 GeneralizedNewtypeDeriving 扩展来获取您需要的 NumOrd 实例:

Prelude> :set -XGeneralizedNewtypeDeriving 
Prelude> newtype Foo = Foo Integer deriving (Eq, Show, Num, Ord)
Prelude> (Foo 10) + (Foo 5) == Foo 15
True
Prelude> max (Foo 10) (Foo 5) == Foo 5
False

关于haskell - 在 `a` 上使用 `newtype a` 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26209354/

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