Według Hoogle, stałość <=<
(kompozycja monis Kleisli lub "lewa ryba") i =<<
(odwrotne wiązanie monady) to infixr 1
. Jeśli patrzę na nich prawidłowo, wyrazem jak, powiedzmyHaskell/Frege <= <i = << asocjatywność
print <=< return =<< return "foo"
powinny być nieważne, ponieważ to byłoby równoznaczne z równie nieprawidłową
print <=< (return =<< return "foo")
Ale z jakiegoś powodu, choć Pierwsze wyrażenie wydaje się nieważne w Haskell, zgodnie z oczekiwaniami, wydaje się, że Frege nie ma żadnych skarg i ocenia <=<
przed =<<
.
odkryłam to kiedy bawić na pointfree.io aby dowiedzieć się, jak zrobić coś takiego
foo >>= (bar <=< baz)
punkt wolny, i to dało mi
bar <=< baz =<< foo
który nie robi wyglądają całkiem dobrze, biorąc pod uwagę utrwalenia.
Odmiana typu w Fregge jest prawdopodobnie spowodowana tym, że AMP (lub nawet bardziej radykalna hierarchia klas Monady) została zaimplementowana od samego początku, na wiele lat przed jej wykonaniem w GHC. Proszę uprzejmie, aby rozważyć, czy można odmówić Frege "własności Haskella" na tej podstawie. W tym silnym sensie żaden program Haskella po AMP nie jest napisany w Haskell. To nie ma sensu, IMHO. (Oczywiście, zdaję sobie sprawę, że istnieją inne powody, by odmówić Fregowi pełnego statku Haskell.) – Ingo
@Ingo: Próbowałem powiedzieć: "Fregą nie jest Haskell, więc nie jest zaskakujące, że byłoby inaczej; w rzeczywistości jest inaczej."Innymi słowy, postawiłbym przyczynowość odwrotnie :-) Komentarz" Haskell property "był komentarzem na temat użycia języka angielskiego: Frege to jedyny język, jaki widziałem, opisany jako" Haskell ", więc to jest nietypowy sposób, aby to opisać, i pomyślałem, że to ważne, aby wywołać w nim potencjalne źródło nieporozumień.) –
Muszę przyznać, że nie jestem w 100% zadowolony z sloganu "Haskell for JVM", to jest jeden z powodów dlaczego najpierw wybrałem inną nazwę, ale to właśnie SPJ zachęcił nas do bycia bardziej ofensywnymi w tym zakresie, odrzucając (wciąż istniejące) różnice jako nieznaczne. Zgadzam się również, że "a" może być trochę – Ingo