2012-02-15 10 views
1

型に文字列内の数字を変換します。 readInt "12 32 11"のようなリストにreadIntを使用して、今Haskellは私がしたようなタイプを定義している

readInt :: String -> Int 
readInt s = read s :: Int 

は、私のタイプ[Int]である[12, 32, 11]を与えます。

私の質問は:[Int]の代わりに、[Register]をどうすれば得ることができますか?

私が試した:

readRegister :: String -> Register 
readRegister s = read s :: Register 

を私は推測として、有効な構文ではないようです。

+1

私のために働く、これはエラーを生じさせません:http://hpaste.org/63762 - あなたのサンプルからあなたのコードから得たエラーとこれに関連する他のコードを含めるべきです –

+1

ハスケルは非常に弱いです。彼らはかなり交換可能です。 – Owen

答えて

3

Registerの定義はタイプエイリアスです。つまり、右側に置き換え可能です。ここではIntです。

しかし、readInt "12 32 11"[12,32,11] :: [Int]となります。あなたのタイプシグネチャがreadInt :: String -> Intであるため、これは不可能です。おそらく、あなたのコードをもう少し見せてくれるかもしれません。

+0

申し訳ありませんが、私は詳細を追加する必要があります。 [> - >登録 readRegister S = ::秒を読ん readRegisters秒::文字列を登録する - のreadInt関数は 'マップのreadInt(言葉秒)' が今私のreadRegisterコードが readRegisterです:: Stringとして使用されていますRegister] readRegisters s = map readRegister(ワードs) – rdasxy

2

Registerは、タイプIntのもう1つの名前ですが、同じタイプです。構文

readRegister :: String -> Register 
readRegister s = read s :: Register 

が有効です(ただし、read結果の型名は不要です)。動作しない場合は、コンパイラ/インタプリタが壊れています。ただし、タイプがIntまたはRegisterのいずれで表示されるかは驚くかもしれません。タイプシノニムがいつ拡張されるかを予測することは容易ではありません。

関連する問題