gpt4 book ai didi

为枚举定义值的类似 Haskell 的方法

转载 作者:行者123 更新时间:2023-12-05 04:25:24 26 4
gpt4 key购买 nike

我正在寻找一种类似 Haskell 的方法来定义枚举值。这是我目前拥有的:

data Binop
= Plus
| Minus
| Times
| Divide
-- deriving ( Show ) <--- removed this

instance Show Binop where
show Plus = "+"
show Minus = "-"
show Times = "*"
show Divide = "/"

最好在 Binop 数据类型中包含常量值("+""-" 等)。

最佳答案

您写的内容看起来不错,模数通常对强约定的提示:Show 实例应该生成有效的 Haskell 代码来重现该值。我可能会考虑返回一个 Char 而不是 String 除非你确定 String 更好,所以像这样:

name :: Binop -> Char
name = \case
Plus -> '+'
Minus -> '-'
Times -> '*'
Divide -> '/'

如果它们很多,您可以考虑制作一个查找表以实现紧凑性,但我完全不确定这是否会更有效率。

name :: Binop -> Char
name = (listArray (minBound, maxBound) "+-*/" !)

我想您还需要定义一个 Ix 实例,但是您可以重用 Ix IntEnum Binop 实例来让它很短;或使用相同的基本思想,但由 Map 而不是 Array 支持。

关于为枚举定义值的类似 Haskell 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73293262/

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