2012-07-27 21 views
5

我正在練習LYAH。缺少相應的綁定 - 這是什麼意思?怎麼運行的?

phoneBook.hs文件包含以下代碼:

phoneBook :: [(String, String)]

雖然試圖編譯上述代碼,我收到以下錯誤:

*Main> :load "/home/optimight/phoneBook.hs" [1 of 1] Compiling Main (/home/optimight/phoneBook.hs, interpreted)

/home/optimight/phoneBook.hs:1:1: The type signature for `phoneBook' lacks an accompanying binding Failed, modules loaded: none.

問題brano的答案,後續評論後加入這個答案:我們如何提供上述類型簽名的實現?

如果我補充一點:

type phoneBook = [(String, String)]

我收到以下錯誤:

Prelude> :load "/home/optimight/phoneBook.hs" [1 of 1] Compiling Main (/home/optimight/phoneBook.hs, interpreted)

/home/optimight/phoneBook.hs:2:6: Malformed head of type or class declaration: phoneBook Failed, modules loaded: none

回答

6

您需要提供電話簿的實現。

phoneBook :: [(String, String)]只是簽名。

+0

爲什麼強制提供實施?如果我正在開發一個haskell應用程序,並且如果phoneBook是它的一部分,我將永遠不會捆綁任何數據。這將是一個空白的電話簿。 – Optimight 2012-07-27 07:43:29

+0

我們如何爲此提供實施? – Optimight 2012-07-27 07:44:15

+1

@優化例如'phoneBook = []'。無論您選擇放在這裏的價值是整個程序執行過程中的價值。 「phoneBook」應該不是定義頂級值,而應該是一個函數參數或「State」或「StateT」函數中的狀態(的一部分)。 – dave4420 2012-07-27 07:48:41

1

如果你想聲明一個類型,它必須有首字母大寫,即type PhoneBook = [(String, String)]

如果你想聲明一個函數,那麼你需要提供它的定義(綁定)或者它的定義和它的類型簽名。在最小的努力來編譯你的代碼是:

然後你就可以用[(String, String)]型如任何值替換undefined[("Person","Number")]