Ich versuche, das Papier zu verstehen: Abhängige Typen ohne Zucker, indem ich einen Interpreter und eine Typprüfung für die Sprache implementiere. Dabei habe ich gesehen, dass die unfold t as x -> u
Syntax für rekursive Definitionen (die Syntax ist in Abschnitt 2.1 definiert) eine Variable bindet, aber ich verstehe nicht, warum dies erforderlich ist. Keines der Beispiele in diesem Artikel verwendet tatsächlich die variable Bindung - alle verwenden eine Kurzform unfold t
(Bedeutung unfold t as x -> x
).
Ich kann sehen , dass der Typ für sie (aus dem Abschnitt 5) verwendet die variable Prüfregel verbindlich, aber ich verstehe nicht , die Auswirkungen dieses. Soweit ich das beurteilen kann, unfold t as x -> u
ist das völlig gleichbedeutend mit let x = unfold t in u
.
Kann jemand ein Beispiel dafür geben, wann die Variablenbindung hilfreich oder notwendig ist? Gibt es einen Begriff, der unfold
mit der Langform und nicht mit der Kurzform und prüft let
?
quelle
Antworten:
Ich glaube nicht, dass es einen magischen / notwendigen Grund gibt. IMO, es wurde so geschrieben, um klarer zu machen, dass
unfold
es sich um eine Analyse- / Überprüfungseliminierungsregel handelt. genauso wie warumsplit
so geschrieben ist, wie es ist, anstatt als erste und zweite Projektion geschrieben zu werden, und warumcase
so geschrieben wird, wie es ist, anstatt wieuneither
in Haskell geschrieben zu werden.Beachten Sie beim "analytischen" Bit, dass die anderen Eliminierungsregeln entweder synthetisch / ableitend (Beta) oder bidirektional (Bang) sind.
quelle
!x
nicht geschriebenforce x as y -> y
. Ob es einen tieferen Grund gibt oder nicht, diese Antwort befriedigt meine Neugier. Vielen Dank!