我正在尝试根据比率模式匹配:
isValid :: Ratio Int -> Bool
isValid (num % den) = ...
但是,这会产生:
Parse error in pattern: num % den
有趣的是,Data.Ratio
包以这种方式定义numerator
和denominator
函数,但使用:%
运算符:
numerator (x :% _) = x
denominator (_ :% y) = y
但是,我无法访问后一种运营商。
有人可以解释为什么我的模式匹配不起作用以及我如何解决它?
答案 0 :(得分:5)
虽然在这种情况下您只需从GHC.Ratio
导入运算符,但从GHC 7.8开始有一个通用解决方案:pattern synonyms。
pattern num :% denom <- ((\x -> (numerator x, denominator x)) -> (num, denom))