我有以下代码
import Data.List
data Card = One
| Two
| Three
| Four
| Five
| Six
| Seven
| Eight
| Nine
| Ten
| J
| Q
| K
| A
deriving (Show, Eq, Ord, Enum)
data Hand = Hand Card Card Card Card Card deriving(Show)
largestCard :: Hand -> Card
largestCard (Hand a b c d e) = One
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试toEnum 3在GHCi中使用时,我得到了Exception: Prelude.Enum.().toEnum: bad argument。如何解决?
最后一个功能只是一个虚拟功能。现在它什么也没做。
的类型toEnum是
toEnum :: Enum a => Int -> a
Run Code Online (Sandbox Code Playgroud)
GHCi没有上下文来确定Enum您想要的实例toEnum 3,因此默认情况下它将提供类型()。该类型只有一个值,()因此任何东西0都将无效。
以下是toEnum在GHCi中进行调用的一些示例:
?> toEnum 0
()
?> toEnum 1 :: Bool
True
?> toEnum 3 :: Card
Four
Run Code Online (Sandbox Code Playgroud)
您还可以使用类型应用程序:
?> :set -XTypeApplications
?> toEnum @Bool 1
True
?> toEnum @Card 3
Four
Run Code Online (Sandbox Code Playgroud)