2016-04-18 17 views
1

私のHaskellファイルに以下の宣言が含まれているとします。同じ行に複数の変数の型を宣言する方法

a :: Integer 
b :: Double 
c :: String 

a = 10 
b = 12.34 
c = "Abcd" 

以下のように同じ行に変数に値を割り当てることができます。

(a, b, c) = (10, 12.34, "Abcd") 

私の質問は、同じ行にどのようにタイプ署名を定義できますか?

私は次のステートメントを使用しました。

(a, b, c) :: (Integer, Double, String) 

次のエラーが発生しています。

Invalid type signature: (a, b, c) :: (Integer, Double, String) 
    Should be of form <variable> :: <type> 

答えて

3
(a :: Integer, b :: Double, c :: String) = ...` 

は動作しますが、おそらくScopedTypeVariables拡張子を必要としなければなりません。

6

あなたは本当にあなたができる、これを行う必要がある場合:

a :: Integer; b :: Double; c :: String 
(a, b, c) = (10, 12.34, "Abcd") 

ことが一般的により良いスタイルだから、私は、あなたが複数の行を好きに学ぶお勧めしますけど。

+0

1行の宣言は、すべての変数が同じ型を持つときに便利です: 'a、b、c、d、e、f :: Int' – ZhekaKozlov

1

彼らは(それが複合体として理にかなっている)構造を形成する場合は、最初にそれらを構成することはオプションであるかもしれない:

vals :: (Integer, Double, String) 
vals = (10, 12.34, "Abcd") 

(a, b, c) = vals 

私がそうでなければ別々の行に入れない理由が表示されません。

1

バインディングと型宣言を1行にまとめることができます。

a = 10  :: Int 
b = 12.34 :: Double 
c = "Abcd" :: String 

後でこれらの名前に別の値を割り当てることはできません。

関連する問題