2014-07-10 4 views
6

Also ich die Aeson Bibliothek wurde unter Verwendung, und dachte, es wäre sehr nützlich sein, die folgende Funktion zu haben:Typ Unterschrift braucht einen Typ, der nicht von der Bibliothek exportiert wird

v .:! f = liftM (fromMaybe mempty) (v .:? f) 

Als ich GHCi für die fragen Typ, erhalte ich:

(.:!) 
    :: (Monoid r, FromJSON r) => 
    Object 
    -> T.Text -> aeson-0.7.0.6:Data.Aeson.Types.Internal.Parser r 

jedoch Parser selbst werden jedoch nicht exportiert entweder durch Data.Aeson oder Data.Aeson.Types. Muss ich keine Typ-Signatur für die von mir definierte Funktion haben?

Alternativ, wenn jemand einen besseren Weg zu erreichen, was ich versuche zu tun, würde ich an Ihren Vorschlägen interessiert sein.

+3

[Parser] (http://hackage.haskell.org/package/aeson-0.7.0.6/docs/Data-Aeson-Types.html#t:Parser) wird aus 'Data.Aeson.Types' – bennofs

+0

exportiert Oh ... Ja. Du hast recht. Ich dachte, ich hätte das früher versucht und es hat nicht funktioniert. Muss etwas falsch gemacht haben. – Emil

+1

Aber ich denke, die Frage steht immer noch? Was würdest du tun, wenn es nicht wäre? – Emil

Antwort

3

Gegenwärtig ist es in Haskell durchaus möglich, Code zu schreiben, der einen abgeleiteten Typ hat, den Sie wegen nicht exportierter Symbole nicht selbst schreiben können. Es gab eine discussion about this auf der Haskell-Bibliotheks-Mailingliste im April 2014, wo keine feste Schlussfolgerung erreicht wurde, aber der allgemeine Sinn war, das aktuelle Verhalten beizubehalten. Die allgemeine Regel besagt, dass wenn eine Spracherweiterung erforderlich wäre, um die Typunterschrift zu schreiben, die abgeleitet werden würde, müssen Sie diese Erweiterung aktivieren, auch wenn Sie die Signatur nicht explizit einschließen.

+0

Liegt das daran, dass es sinnvoll ist, einen Typ-Synonym zu exportieren, ohne den zugrunde liegenden Typ zu exportieren? – dfeuer

+0

Ja, ich denke das war das Argument dagegen. Persönlich denke ich, es wäre besser, vollständig zu sein. –

+0

Ich glaube, es ist entweder schwierig oder unmöglich herauszufinden, ob ein Typ in Form von sichtbaren Synonymen ausgedrückt werden kann. Ob es wirklich Sinn macht, ein Typ-Synonym zu exportieren, während der zugrunde liegende Typ versteckt wird, ist eine ganz andere Frage. Wenn ja, könnte das "Pipes" -Paket ein guter Ort sein, um nach so etwas Ausschau zu halten. – dfeuer