Istnieją co najmniej dwa przykłady w samym papierze:
„1. Wstęp”, mówi: „Na przykład, możemy być w stanie zapewnić, [w czasie kompilacji], że przypuszczalny drzewo czerwono-czarne naprawdę ma czerwono-czarna własność ".
"2.1 Promowanie typów danych" omawia wektory o indeksie długości (tzn. Wektory z błędem "indeks poza granicami" w czasie kompilacji).
Można również przyjrzeć się wcześniejszej pracy w tym kierunku, np. Biblioteka HList dla bezpiecznych typów list heterogenicznych i zbiorów rozszerzalnych. Oleg Kiselyov ma wiele powiązanych prac. Możesz także czytać prace dotyczące programowania z rodzajami zależnymi. http://www.seas.upenn.edu/~sweirich/ssgip/main.pdf ma wstępne przykłady obliczeń na poziomie typu w Agdzie, ale można je również zastosować do Haskella.
Z grubsza chodzi o to, że w przypadku list podano bardziej precyzyjny typ. Zamiast
head :: List a -> a
to
head :: NotEmptyList a -> a
Ta ostatnia funkcja głowa jest bardziej typesafe niż fomer: nigdy nie mogą być stosowane do pustych list, ponieważ spowodowałoby to błędy kompilatora.
Do wyrażania typów takich jak NotEmptyList potrzebne są obliczenia na typie. Klasy typów z zależnościami funkcjonalnymi, rodziny GAGT i (indeksowane) już zapewniają słabe formy obliczeń na poziomie typu dla haskell. Praca, o której wspomniałeś, rozwija się dalej w tym kierunku.
Zobacz implementację przy użyciu tylko klas typu Haskell98, patrz http://www.haskell.org/haskellwiki/Non-empty_list.
To jest dobre pytanie. Jednym ze sposobów na zbudowanie dobrej odpowiedzi może być przetłumaczenie przykładowych plików, które otrzymujesz, gdy "cabal install she". Mogłabym opublikować kod SHE, jako ćwiczenie dla czytelnika: czy byłoby to przydatne? Próbuję zainstalować 7.4 już teraz, ale używam Leoparda i obawiam się złego wyniku. – pigworker
@pigworker, próbowałem przyjrzeć się przykładom SHE i myślę, że wymyśliłem kilka części, ale prosty przykład SHE z odrobiną "komentarzy dla manekinów" prawdopodobnie byłby również fajny. – aleator