haskell - 为什么我不能根据 Haskell 中的比率进行模式匹配?

标签 haskell pattern-matching pattern-synonyms

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

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

但是,这会产生:

Parse error in pattern: num % den

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

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

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

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

最佳答案

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

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

关于haskell - 为什么我不能根据 Haskell 中的比率进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33325370/

相关文章:

f# - 在有区别的联合上匹配

haskell - 为什么递归模式同义词被接受?

haskell - Haskell 中的 As (@) 模式

haskell - 这个简单的类型定义有什么问题? (期待更多的论点......)

haskell - 如何从 Haskell 中的文本 block 中提取关键字

sql - 显示在结果中匹配的参数

haskell - 高阶函数和括号

Haskell 为什么使用 @(as)

haskell - 我怎样才能写出这个模式同义词而没有歧义的类型错误?