2012-02-15 98 views
1

我已經定義了一個類型爲類型:哈斯克爾轉換數字的字符串轉換成

type Register = Int

我也能夠使用像一個函數的字符串列表數字列表如下:

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

現在,像readInt "12 32 11"名單上使用readInt給我[12, 32, 11]這是[Int]類型。

我的問題是:而不是[Int],我怎麼能得到[Register]

我想:

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

但我猜到了,它似乎並沒有有效的語法。

+1

適用於我,這不會產生任何錯誤:http://hpaste.org/63762 - 您應該在代碼中包含代碼中的錯誤,以及與此相關的任何其他代碼。 – 2012-02-15 21:26:31

+1

類型別名Haskell非常脆弱;他們幾乎可以互換。 – Owen 2012-02-15 21:27:53

回答

3

您對Register的定義是一個類型別名,即它可以與其右側互換,即此處帶有Int

但是您聲明readInt "12 32 11"會產生[12,32,11] :: [Int]。鑑於您的類型簽名readInt :: String -> Int,這是不可能的。也許你可以向我們展示更多的代碼。

+0

對不起,我應該增加更多細節。所述的readInt函數用作 '映射的readInt(字S)' 現在我readRegister代碼是 readRegister ::字符串 - >註冊 readRegister S =閱讀S ::註冊 readRegisters的s ::字符串 - > [註冊] readRegisters s = map readRegister(words s) – rdasxy 2012-02-15 22:23:16

2

Register只是Int類型的另一個名稱,它是同一類型。語法

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

有效(但read結果的類型註釋是不必要的)。如果它不起作用,你的編譯器/解釋器就壞掉了。然而,類型是否顯示爲IntRegister可能會令人驚訝。預測類型同義詞何時擴展以及何時不擴展並不容易。