为什么我不能在Haskell中匹配比例?

时间:2015-10-25 01:55:14

标签: haskell pattern-matching pattern-synonyms

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

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

但是,这会产生:

Parse error in pattern: num % den

有趣的是,Data.Ratio包以这种方式定义numeratordenominator函数,但使用:%运算符:

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

但是,我无法访问后一种运营商。

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

1 个答案:

答案 0 :(得分:5)

虽然在这种情况下您只需从GHC.Ratio导入运算符,但从GHC 7.8开始有一个通用解决方案:pattern synonyms

pattern num :% denom <- ((\x -> (numerator x, denominator x)) -> (num, denom))