gpt4 book ai didi

haskell - 创建一个具有有限数量居民的 Haskell 类型

转载 作者:行者123 更新时间:2023-12-02 22:03:13 25 4
gpt4 key购买 nike

根据“Haskell for a Great Good”,Bool 的类型声明是

data Bool = True | False

并且 Int 的类型声明可以被认为是类似的

data Int = -2147483648 | -2147483647 | ... | -1 | 0 | 1 | 2 | ... | 2147483647

对于一些抽象代数应用程序,我想创建一个具有有限多个指定值的类似类型,例如,对于某些 $n$,这些值可能是 $0$ 和 $n$ 之间的整数。尽管声明了 Int 的定义,但以下内容不起作用:

data F3 = 0 | 1 | 2

出现错误“类型中的文字非法”。我如何创建一个类型,其中这些是唯一的居民?类似:

data F a = (Int a) => [0..a]

太棒了。

此外,我可以创建一个函数来枚举类型的所有有效值,或返回值列表吗?

最佳答案

您可以使用空构造函数(例如 TrueFalseNothing() 等)

data F3 = Zero | One | Two
deriving (Bounded, Enum, Show)

要枚举所有有效值,我们只需派生 EnumBounded 并让 GHC 为我们完成所有工作。

enum :: (Bounded a, Enum a) => [a]
enum = [minBound .. maxBound]

λ. enum :: [F3]
[Zero,One,Two]

如果您想像实际的 Int 一样使用这些,您可以使用 fromEnum::Enum a => a -> Int ,这相当于

fromEnum Zero = 0
fromEnum One = 1
fromEnum Two = 2

关于haskell - 创建一个具有有限数量居民的 Haskell 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24856760/

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