我有以下代码
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
但是,当我尝试在 GHCi 中使用 toEnum 3
时,我得到 Exception: Prelude.Enum.().toEnum: bad argument
。如何解决这个问题?
最后一个函数只是一个虚拟函数。现在它什么也没做。
最佳答案
toEnum
的类型是
toEnum :: Enum a => Int -> a
GHCi 没有上下文来确定您想要在 toEnum 3
中使用哪个 Enum
实例,因此 by default它提供类型()
。该类型只有一个值 ()
,因此除 0
之外的任何值都将无效。
以下是在 GHCi 中调用 toEnum
的一些示例:
λ> toEnum 0
()
λ> toEnum 1 :: Bool
True
λ> toEnum 3 :: Card
Four
您还可以使用type applications :
λ> :set -XTypeApplications
λ> toEnum @Bool 1
True
λ> toEnum @Card 3
Four
关于Haskell 异常 : Prelude. Enum.().toEnum:错误的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58906601/