Ben*_*Ben 4 haskell pattern-matching pattern-synonyms
我正在尝试根据比例模式匹配:
isValid :: Ratio Int -> Bool
isValid (num % den) = ...
Run Code Online (Sandbox Code Playgroud)
但是,这会产生:
Parse error in pattern: num % den
Run Code Online (Sandbox Code Playgroud)
有趣的是,Data.Ratio包以这种方式定义numerator和denominator功能,但与:%运营商:
numerator (x :% _) = x
denominator (_ :% y) = y
Run Code Online (Sandbox Code Playgroud)
但是,我无法访问后一种运营商.
任何人都可以解释为什么我的模式匹配不起作用以及我如何解决它?
虽然在这种情况下你可以从中导入运算符GHC.Ratio,但是从GHC 7.8开始有一个通用的解决方案:模式同义词.
pattern num :% denom <- ((\x -> (numerator x, denominator x)) -> (num, denom))
Run Code Online (Sandbox Code Playgroud)