bas*_*354 1 enums haskell next
我有一个枚举和一个函数来调用枚举的下一个元素.
data Day = Mon | Tue | Wed | Thu | Fri | Sat | Sun
next :: Day -> Day
next Mon = Tue
next Tue = Wed
next Wed = Thu
next Thu = Fri
next Fri = Sat
next Sat = Sun
next Sun = Mon
Run Code Online (Sandbox Code Playgroud)
我尝试通过调用:
> next Mon
Run Code Online (Sandbox Code Playgroud)
但编译器显示错误:
<interactive>:35:1:
No instance for (Show Day) arising from a use of `print'
Possible fix: add an instance declaration for (Show Day)
In a stmt of an interactive GHCi command: print it
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
除了实现之外Show,如果实现,Enum您可以next使用succ以下方法简化您的功能:
data Day = Mon | Tue | Wed | Thu | Fri | Sat | Sun deriving (Show, Enum)
next :: Day -> Day
next Sun = Mon
next d = succ d
Run Code Online (Sandbox Code Playgroud)
您可以next使用Bounded以下环绕行为制作更通用的版本:
next :: (Eq a, Enum a, Bounded a) => a -> a
next e | e == maxBound = minBound
| otherwise = succ e
data Day = Mon | Tue | Wed | Thu | Fri | Sat | Sun deriving (Eq, Show, Enum, Bounded)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
846 次 |
| 最近记录: |