Я пытаюсь сопоставить шаблон с соотношением:
isValid :: Ratio Int -> Bool
isValid (num % den) = ...
Однако это дает:
Parse error in pattern: num % den
Интересно, что пакет Data.Ratio
определяет функции numerator
и denominator
таким образом, но с оператором :%
:
numerator (x :% _) = x
denominator (_ :% y) = y
Однако у меня нет доступа к этому последнему оператору.
Может ли кто-нибудь объяснить, почему мое сопоставление с образцом не работает и как я могу это исправить?
Not in scope: data constructor ‘:%’
- person Ben   schedule 25.10.2015Ratio
? - person Dair   schedule 25.10.2015Data.Ratio
: hackage. haskell.org/package/base-4.8.1.0/docs/Data-Ratio.html - person Ben   schedule 25.10.2015(:)
, должна быть возможность использовать (%) для соотношений, не так ли? И почему источник использует сопоставление с образцом, но я не могу получить доступ к этому оператору (:%
). - person Ben   schedule 25.10.2015GHC.Real
, чтобы получить доступ к конструктору:%
.Data.Ratio
просто не экспортирует:%
. Вы не можете сопоставить шаблон с%
, потому что это функция, а не конструктор. - person user2407038   schedule 25.10.2015