我将Haskell中的函数定义为(错误是数据类型)
data Error a = Woops | Nice a deriving (Eq, Ord, Show)
mixIt :: Int -> Int -> (Error (Int, Int))
我怎样才能获得返回元组,我已经尝试过了;
fst (mixIt 2 2)
但它会出错?
答案 0 :(得分:1)
fst
是一个类型为(a, b) -> a
的函数(好吧,我们以更具体的方式使用它,如(Int, Int) -> Int
)但我们将它应用于{{1}其类型为mixIt 2 2
。这是我们错误的根源。
为了解决这个问题,我们需要通过模式匹配检查Error (Int, Int)
从Error
返回的{/ 1}}值
mixIt
我们可以在我们有 case mixIt 2 2 of
Nice tuple -> fst tuple
构造函数的情况下显式模式匹配,该构造函数具有我们想要的元组作为参数。但是有一个问题,因为Nice
也可能会返回mixIt
Woops
的另一个构造函数。我们需要单独处理这种情况,否则我们的程序将在运行时失败(非常糟糕)
Error
一旦你填写了案例表达的最后一个分支,你就可以了。