Dies ist eine nette Eigenschaft, die Python hat, weil es sozusagen "Wörterbücher ganz nach unten" gibt. Haskell erlaubt Ihnen, Aliase zu Modulen zuzuweisen, aber es gibt keine Möglichkeit, die Funktionen von der import
-Anweisung (soweit ich weiß) zu aliasieren. Das Beste, was Sie zu tun, wäre in der Lage, ist
import qualified Fruit as F (apple)
banana = F.apple
Sie könnten dies in einem eigenen Modul setzen und die Werte exportieren Sie wollen, um die Details von alledem versteckt, aber das scheint wie eine Menge Arbeit für etwas so einfach .
Wie unten von hammar kommentiert, könnte die Monomorphie-Einschränkung zu Problemen mit dem gefolgerten Typ von banana
führen. Um sicher zu sein, sollten Sie entweder mit Anmerkungen versehen banana
mit seinem gewünschten Typ (wahrscheinlich, dass die apple
) oder deaktivieren Sie die Monomorphie Einschränkung als
{-# LANGUAGE NoMonomorphismRestriction #-}
import qualified Fruit as F (apple)
banana = F.apple
Andernfalls wird die abgeleitete Art von banana
könnte weniger polymorph als erwünscht.
Die Monomorphism-Einschränkung versucht, für jede Top-Level-Funktion eine konkrete Instanz einer Typklasse zuzuweisen (dies erfolgt aus Leistungsgründen). Betrachten wir
example = return()
Diese Funktion sollte Typ haben Monad m => m()
, aber aufgrund der Monomorphismus Beschränkung gibt es nicht genügend Informationen über die Monade Instanz verwendet werden soll, so erhalten Sie die folgende Meldung
Ambiguous type variable `m0' in the constraint:
(Monad m0) arising from a use of `return'
Possible cause: the monomorphism restriction applied to the following:
example :: m0() (bound at Test.hs:44:1)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
In the expression: return()
In an equation for `example': example = return()
Jetzt wenn Sie bieten genügend Informationen für GHC ableiten, welche Instanz von Monad Sie verwenden, wie
example = return()
main :: IO()
main = example
dann GHC die follo geben Flügel Typ
*Main> :t example
example :: IO()
, da Sie es gesagt, dass example
den gleichen Typ wie main
Zur Information gehen, ich bin vor allem in diesem Moment zu importieren versuche Data.List.genericLength als Länge zu erhalten los von Int ohne Refactoring. –
Ich frage mich, wie einfach oder schwer es wäre, GHC zu patchen, um die folgende Syntax zu akzeptieren: 'import Fruit (Apfel als Banane)'. – Wizek