Gepostet: |
data nutzen um Fehler Kompilierzeit abzufangen | ||||||||||
Hallo, ich habe hierzu eine Frage: http://stackoverflow.com/questions/10626943/haskell-between-a-list-and-a-tuple/10627560#10627560 verglichen mit z.B.
liegt der Vorteil darin, dass schon zur Kompilierzeit erkannt wird, dass die Typen nicht passen (Vec (S (S (S (S Z)))) / Vec (S (S (S Z))))) und deswegen dass Programm gar nicht erst kompiliert. Bei der anderen Möglichkeit kompiliert das Programm, weil die Typen Vec und Vec übereinstimmen. Das heißt es richtet sich nach den Typen, oder? Nun die Frage die man vielleicht so offen gestellt nicht beantworten kann... es gibt ja öfter mal Stellen im Kode wo \\\"error = .. \\\" steht - kann / sollte man die dann vermeiden in dem man möglichst versucht, den Typ auf dem die Funktion arbeitet, so zu erweitern dass der Fehler schon zur Kompilierzeit abgefangen wird? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Das ist immer ein Kompromiss: Der Typ Vec mit Type-Level-Programming erkauft sich seine Sicherheit mit längerer Kompilierzeit (oder eventuell sogar Stacküberlauf im Compiler) und Unbequemlichkeiten bei der Programmierung (man kann z.B. keine allgemeine Funktion schreiben, die eine Liste in einen Vec transformiert, und eine Methode, um zwei Vektoren aneinanderzuhängen, ist wirklich kompliziert). Für kurze Vektoren ist der Code sicher nicht schlecht, insbesondere weil man den Typ mit entsprechenden type-Deklarationen und spezialisierten Methoden bequemer machen kann, aber für längere Vektoren sollte man lieber die Laufzeitfehler in Kauf nehmen. Oft lassen sich bestimmte Eigenschaften auch mit anderen Mitteln sicherstellen (man denke an NonEmpty für garantiert nicht-leere Listen, oder Stream für garantiert unendliche Listen). Die Compiler vernünftiger Sprachen sind schon heute turing-komplett ( http://michid.wordpress.com/2010/01/29/scala-type-level-encoding-of-the-ski-calculus/ - lässt sich auch auf Haskell übertragen), aber Type-Level-Programming ist eben noch sehr unhandlich und schwer zugänglich. Es wird intensiv auf diesem Gebiet geforscht, und ich denke, perspektivisch wird dieses Konzept immer mehr Raum einnehmen. |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Danke für die Antwort :) | |||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Derartige Programmierung wird übrigens in Zukunft einfacher: http://www.haskell.org/pipermail/haskell-cafe/2010-October/084852.html |
|||||||||||
Zum Seitenanfang | |||||||||||