これは、いわば「辞書がずっと下にある」ため、Python が持つ優れた特性です。Haskell ではモジュールにエイリアスを割り当てることができますが、ステートメントから関数をエイリアスする方法はありませんimport
(私の知る限り)。あなたができる最善のことは
import qualified Fruit as F (apple)
banana = F.apple
これを独自のモジュールに入れ、必要な値をエクスポートして、これらすべての詳細を非表示にすることもできますが、非常に単純なものにしては大変な作業のように思えます。
以下で hammar によってコメントされているように、単型性の制限により、 の推論された型で問題が発生する可能性がありbanana
ます。banana
安全を期すために、目的の型 (おそらく の型) で注釈を付けるかapple
、単型性の制限を次のように無効にする必要があります。
{-# LANGUAGE NoMonomorphismRestriction #-}
import qualified Fruit as F (apple)
banana = F.apple
そうしないと、推論されたタイプのbanana
ポリモーフィック性が望ましいものより低くなる可能性があります。
モノモーフィズムの制限により、トップレベルの関数ごとに型クラスの具体的なインスタンスを割り当てようとします (これはパフォーマンス上の理由から行われます)。検討、
example = return ()
この関数は type を持つ必要がありますがMonad m => m ()
、モノモーフィズムの制限により、どの Monad インスタンスを使用する必要があるかについて十分な情報がないため、次のメッセージが表示されます。
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 ()
ここで、GHC が使用している Monad のインスタンスを推測するのに十分な情報を提供すると、次のようになります。
example = return ()
main :: IO ()
main = example
GHCは次の型を与える
*Main> :t example
example :: IO ()
example
と同じタイプになると言ったのでmain