如何在 haskell 中定义无限/循环代数数据类型?
How can I define an infinite / looped algebraic datatype in haskell?
我有一个这样定义的音符数据类型:
data Note = Ab | A | Bb | B | C | Db | D | Eb | E | F | Gb | G deriving (Eq, Ord)
如何使它成为 Enum
的实例,以便 succ G
returns Ab
?
您必须自己定义 Enum
实例:
instance Enum Note where
fromEnum note = case note of
Ab -> 0
A -> 1
...
toEnum n = case n `mod` 12 of
0 -> Ab
1 -> A
...
toEnum
中的“模 12”部分将循环您的笔记。
我有一个这样定义的音符数据类型:
data Note = Ab | A | Bb | B | C | Db | D | Eb | E | F | Gb | G deriving (Eq, Ord)
如何使它成为 Enum
的实例,以便 succ G
returns Ab
?
您必须自己定义 Enum
实例:
instance Enum Note where
fromEnum note = case note of
Ab -> 0
A -> 1
...
toEnum n = case n `mod` 12 of
0 -> Ab
1 -> A
...
toEnum
中的“模 12”部分将循环您的笔记。