Natknąłem się na sytuację, w której chciałbym dopasować wzór do operatorów. Powoduje to jednak błąd z GHC na Pattern match(es) are overlapped
. Nie rozumiem dlaczego. Czy dopasowanie wzorców do operatorów jest niedozwolone? Zakładam, że od momentu umieszczenia symbolu operatora w nawiasach: converts it into an identifier, powinno to zadziałać.Dopasowanie do wzorca nakładają się - Dopasowanie wzorca do operatorów
test :: (Integer -> Integer -> Integer) -> String
test (+) = "plus"
test (-) = "minus"
test _ = "other"
Są inne sposoby na osiągnięcie tego, co chcę zrobić. Jestem ciekawy, dlaczego to nie działa.
Twój pierwszy wiersz pasuje do dowolnej funkcji i lokalnie łączy go z operatorem infiksowania +. Kolejne linie są więc nadwyżką wymagań, stąd ostrzeżenie. Zauważ, że symbole funkcji, infix lub nie, mogą być lokalnie odbijane przez dopasowywanie wzorców w ten sposób. Tylko konstruktory pisane wielką literą (lub: -prefixed konstruktory infiksów) i literały pasują tylko same, a następnie tylko w typach pierwszego rzędu. Haskell daje (prawie) nie ma możliwości sprawdzenia intensywności właściwości funkcji: (patrz dalej) możesz wykorzystać tylko ich właściwości ekstensywne, stosując je. "Czy to jest funkcja +?" jest niedozwolone. – pigworker
@pigworker, to wyjaśnia, dlaczego otrzymywałem komunikat "to powiązanie przesłania istniejącą definicję preludium". dzięki za informację. –