4

我正在尝试根据比率进行模式匹配:

isValid :: Ratio Int -> Bool
isValid (num % den) = ...

但是,这会产生:

Parse error in pattern: num % den

有趣的是,Data.Ratio包以这种方式定义了numeratoranddenominator函数,但是使用了:%操作符:

numerator   (x :% _)    =  x
denominator (_ :% y)    =  y

但是,我无权访问后一个运算符。

谁能解释为什么我的模式匹配不起作用以及如何解决它?

4

1 回答 1

5

虽然在这种情况下您可以只从 导入运算符GHC.Ratio,但从 GHC 7.8 开始有一个通用的解决方案:模式同义词

pattern num :% denom <- ((\x -> (numerator x, denominator x)) -> (num, denom))
于 2015-10-25T05:50:23.000 回答