Anscheinend zu verwenden, mit einigen GHC Erweiterungen ist es möglich, eine Art von Liste zu definieren, die Länge in der Art codiert, wie folgt aus:Wie Länge kommentierten Listen in Haskell
{-# LANGUAGE GADTs, EmptyDataDecls #-}
data Z
data S a
data List l a where
Nil :: List Z a
Cons :: a -> List l a -> List (S l) a
Während ich sehen, warum dies kann nützlich sein, ich habe Probleme, es zu benutzen.
Wie kann man eine solche Liste erstellen? (Abgesehen davon, es in das Programm zu kodieren.)
Angenommen, Sie möchten ein Programm erstellen, das zwei solche Listen vom Terminal liest und ihr Punktprodukt berechnet. Während es einfach ist, die eigentliche multiplikative Funktion zu implementieren, wie kann das Programm die Daten lesen?
Können Sie mich auf einen vorhandenen Code verweisen, der diese Techniken verwendet?
Also, ich bin * ein bisschen * spät, aber ich bin verwirrt darüber, wie Sie das tatsächlich verwenden würden? 'fromList' gibt eine' UList', aber die von Ihnen angegebenen Funktionsbeispiele erfordern eine 'List'. Wie würdest du die "Liste" aus einem "UList" herausholen, so dass du zum Beispiel "mapList" anwenden könntest? –