2013-06-15 9 views
6

完全に型のあいまいな関数を持つことは可能でしょうか?型変数は、型コンストラクタ宣言または型クラスの要求に使用される構文のような、ある完全多型関数を使用できますか?

Poly :: a -> a 

:機能のようなタイプの署名を持っているでしょうか?

data TypeConstructor a = One | Two a 
Func :: Num a => a -> a 

使用されているどのような値コンストラクタ知らなくても、常にそれ自身の値を返すユビキタスid機能させることができるでしょうか?

+4

このような意味ですか? 'myId x = x' –

+3

私の心は吹かれました。だから、あなたはC++のようなものについて心配する必要はありません。 –

+1

これは標準機能です。 Prelude実装については、[here](http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:id)を参照してください。将来的に特定のタイプシグネチャについて疑問がある場合は、[このような] Hoogle(http://www.haskell.org/hoogle/?hoogle=a+-%3E+a)で検索できます。 –

答えて

9

Haskell関数は、基底型の具体的な機能を使用していない場合、自動的にポリモーフィックになります。あなたはghciとタイプを開く場合:

>>> let f x = x 

...そして、それは自動的にfが完全に多型であることを推測しますそれをfのタイプを尋ねる:

>>> :type f 
f :: t -> t 

同じことは、ファイルを使用する場合。

f x = x 

を...と、コンパイラはfa -> aを入力していることを推測されます:あなただけ定義することができます。また、fも明示的に注釈を付けることができます。

f :: a -> a 
f x = x 
+1

で行うことができます。何もできないのは 'poly :: x - > y' ... – MathematicalOrchid

+1

です。しかし、それは底を伴います: 'poly_ = let r = r in r'。 –

+0

@Rhymoid 'poly _ = error"私もそれに住んでいます "";) – JJJ

関連する問題