2017-01-17 18 views
0

Int a => a -> StringInt -> Stringの違いは何ですか?どのdiffrence Int a => a - > StringとInt - > String

成功:

f1 :: Int -> String 

エラー:

f1 :: Int a => a -> String 

f1 n = show n 
+0

ここで実際の質問は何ですか? See [ask] –

+0

私はc/C++から来たと思います。 'Int a'は' a'が 'Int'であることを意味しません。読んでみることをお勧めします[lyahfgg](http://learnyouahaskell.com/types-and-typeclasses) – wizzup

答えて

3

Intが、具体的なタイプですので、制約を作成するために使用することはできません。 Numのような型クラス(種類が* -> Constraintの場合)が制約の作成に使用されます。

あなたはする必要はありません。制約の目的は、aのような型変数が特定のクラスのインスタンスである型でなければならないことを指定することです。 Int aのようなものは「タイプIntタイプa」を意味するだけで、そのようなタイプ(驚き:Int)が1つしかないので、Int -> Stringと書いてください。

Num a => a -> Stringような制約はIntIntegerFloatDouble、またはいくつかの他の適切なタイプであってもよいNumを実装する任意の型の引数を取る関数の種類を定義します。

関連する問題