これはPythonが持っている素敵なプロパティです。言い換えれば、その "辞書はすべて下がっている"ためです。 Haskellではモジュールにエイリアスを割り当てることができますが、 という別名をimport
文からエイリアスする方法はありません(私が知る限り)。あなたが行うことができるだろう最高の
import qualified Fruit as F (apple)
banana = F.apple
あなたはこのすべての詳細を隠し、独自のモジュールでこれを入れて、必要な値をエクスポートすることができますが、それはそう単純なもののために多くの作業のように思えます。
以下にハマールによってコメントされているように、単相性の制限により、推測されたタイプ がbanana
の問題を引き起こす可能性があります。安全のために、あなたはその目的のタイプ(apple
のおそらく)でbanana
に注釈を付ける、または
{-# LANGUAGE NoMonomorphismRestriction #-}
import qualified Fruit as F (apple)
banana = F.apple
として単相性制限を無効にする必要がありますどちらかそうでない場合は、banana
の推論された型が望まれるよりも少ない多型である可能性があります。
単一相異制限は、各上位レベルの関数のタイプクラスの具体的なインスタンスを割り当てようとします(これは、パフォーマンス上の理由から行われます)。
example = return()
この関数はタイプ
Monad m => m()
を持っていますが、単相性制限のために、モナドのインスタンスを使用すべきかについての十分な情報がないはずです、考えてみましょうあなたは
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()
ここで、次のメッセージが表示されますので、あなたは、このような
example = return()
main :: IO()
main = example
として、使用しているモナドのどのインスタンス推論するGHCのための十分な情報を提供する場合、その後、GHCはfolloを与えますウイングタイプ
*Main> :t example
example :: IO()
あなたはexample
が直接そのための構文はありませんmain
で、私は特によいいよリファクタリングなしでIntを取り除く。 –
次の構文を受け入れるようにGHCを修正するのがどれほど簡単か難しいのだろうか?「フルーツ(リンゴをバナナとして)」。 – Wizek