Ich versuche, ein Haskell-Datentyp ein bisschen wie ein Python-Wörterbuch zu machen, ein Rubin-Hash oder ein JavaScript-Objekt, in dem eine Zeichenfolge auf einen Wert verknüpft ist, etwa so:Syntaxregeln für Haskell Infix Datentyp Konstrukteurs
data Entry t = Entry String t
type Dictionary t = [Entry t]
Der obige Code funktioniert gut. Ich möchte jedoch einen etwas netteren Konstruktor, also habe ich versucht, es so zu definieren:
Dies schlug fehl. Ich habe es versucht:
data Entry t = [Char] ~> t
Erneut ist es fehlgeschlagen. Ich weiß, dass ~
besondere Bedeutung in Haskell hat, und GHCi erlaubt noch die Bediener ~>
, aber ich habe noch eine andere Art und Weise versucht:
data Entry t = [Char] & t
Und noch einen weiteren Ausfall durch Fehler analysieren. Das finde ich verwirrend, weil aus irgendeinem unerklärlichen Grund, dies funktioniert:
data Entry t = String :> t
Bedeutet dies, dass es bestimmte Regeln für welche Zeichen in Infix Typkonstruktoren auftreten können, oder ist es eine Besetzung von Fehlinterpretationen. Ich bin kein Neuling in Haskell, und ich bin mir bewusst, dass es idiomatischer wäre, den ersten Konstruktor zu verwenden, aber dieser hier stopft mich, und es scheint ein wichtiger Teil von Haskell zu sein, dass ich vermisse.
Off-Topic, aber: 'Dictionary t wird sein * nichts wie *" ein Python-Wörterbuch, ein Ruby hashmap ", etc. Es ist nur eine verkettete Liste, nichts mehr. – gspr
Ich stimme nicht zu. Mein Plan ist, mehrere Funktionen sowie Monoid- und Funktor-Instanzen zu machen, damit ich nach bestimmten Ergebnissen mit möglichen Fehlern suchen kann, ohne Maybe zu überladen. Das ist der einfache Teil, aber das habe ich nicht verstanden. – AJFarmar
Was @gspr antreibt, sind die folgenden Unterschiede: Sie können nicht (direkt) einen 'String' und einen' Int' im selben 'Dictionary' speichern, die Suche wird im schlimmsten Fall linear sein, Sie können ' t zerstörerisch update (und Sie werden nie die nette 'dict [key]' Syntax bekommen). Es ist also nicht wirklich wie die Datenstrukturen, die Sie erwähnen ... – yatima2975