Czy wszystkie przykłady Haskella Applicative Typeclass, które otrzymujemy z platformą Haskell, zostały udowodnione, że spełniają wszystkie prawa aplikacyjne? Jeśli tak, gdzie znajdujemy te dowody?Dowody stosowania praw dla instancji haskell
Kod źródłowy Control.Applicative nie zawiera żadnego dowodu na to, że przepisy dotyczące stosowania różnych instancji nie istnieją. To po prostu mówi, że
-- | A functor with application.
--
--Instances should satisfy the following laws:
to wtedy po prostu stwierdza, przepisy ustawowe w komentarzach.
Znalazłem podobny przypadek dla wystąpień innych czcionek (Alternatywa i Monada).
Czy użytkownicy tych bibliotek mają samodzielnie zweryfikować te prawa?
Ale zastanawiałem się, czy rygorystyczne dowody tych praw zostały podane przez deweloperów gdzie indziej?
Ponownie, zdaję sobie sprawę z tego, że rygorystyczny dowód stosowania prawa (w Monadzie) dla IO Monad, który obejmuje rozmowę ze światem zewnętrznym, może być bardzo złożony.
Dzięki.
Przypuszczam, że istnieje również możliwość napisania kodu w systemie takim jak Agda lub Coq, a następnie wyodrębnienia z niego kodu źródłowego Haskella. Szczerze mówiąc nie próbowałem tego, ale wynik byłby całkowicie formalnym dowodem wymaganych właściwości. –
@Gabriel Dzięki.Podobnie jak w przypadku ListT, jak wiele innych wdrożeń zauważyło, że zepsuło się? Czy istnieje lista niewłaściwych implementacji instancji? także, jeśli uwzględnienie całego dowodu nie jest możliwe ze względu na długość, wówczas możliwe jest umieszczenie hiperłącza w dowodzie w kodzie źródłowym i umieszczenie tekstu dowodowego na Haskell.org w ramach dokumentacji. – user1308560
@ user1308560 ListT jest jedynym w standardowych bibliotekach, które znam z góry mojej głowy. Idea połączenia ma sens. –