2016-07-18 18 views
-1

Ich erstellen eine Zuordnung von Wörtern aus einer Liste, aber ich bekomme diesen Rückgabewert und den Fehler unten. Wenn ich manuell Dinge hinzufüge, kann ich Map.find ohne jedes Problem. Gibt es eine gute Ressource für Typfehler wie diese?Map Type Fehler in OCaml

# val word_mapping : int DictMap.t list = 
     [<abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; 
     <abstr>] 
    # DictMap.find "There" word_mapping;; 
    Error: This expression has type int DictMap.t list 
      but an expression was expected of type 
      'a DictMap.t = 'a Map.Make(String).t 

Antwort

1

Sie sollten Ihren Code offen legen, wenn Sie bessere Antworten wünschen.

Die Tippfehlermeldung hat bereits erklärt, was falsch ist: Sie erstellen nicht EINE Karte von Wörtern zu Ints des Typs int DictMap.t, sondern eine Liste von MAPS von Wörtern zu Ints des Typs int DictMap.t list. Ich denke, Ihr Code ist wie

List.map (fun (k,v) -> DictMap.add k v DictMap.empty) [("a",1); ("b",2); ... ] 

oder etwas Äquivalentes.

Was haben Sie stattdessen zu tun ist von einer leeren DictMap.t zu starten und wachsen ihm Liste Faltung unter Verwendung, zum Beispiel:

List.fold_left (fun dict (k,v) -> DictMap.add k v dict) DictMap.empty [("a",1); ("b",2); ... ]