Haskell进入元组

时间:2016-03-20 20:20:18

标签: haskell error-handling

我将Haskell中的函数定义为(错误是数据类型)

data Error a = Woops | Nice a deriving (Eq, Ord, Show)

mixIt :: Int -> Int -> (Error (Int, Int))

我怎样才能获得返回元组,我已经尝试过了;

fst (mixIt 2 2)

但它会出错?

1 个答案:

答案 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

一旦你填写了案例表达的最后一个分支,你就可以了。