Почему я не могу сопоставить образец с соотношением в Haskell?

Я пытаюсь сопоставить образец с соотношением:

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

Тем не менее, это дает:

Parse error in pattern: num % den

Интересно, что Data.Ratio Пакет определяет numerator а также denominator таким образом, но с :% оператор:

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

Однако у меня нет доступа к этому последнему оператору.

Кто-нибудь может объяснить, почему мой шаблон не работает и как я могу это исправить?

1 ответ

Решение

Хотя в этом случае вы можете просто импортировать оператор из GHC.Ratio, есть общее решение, начиная с GHC 7.8: шаблонные синонимы.

pattern num :% denom <- ((\x -> (numerator x, denominator x)) -> (num, denom))
Другие вопросы по тегам