2012-07-27 11 views
5

Praktykuję od LJAAH.nie ma towarzyszącego wiązania - co to znaczy? Jak to działa?

plik phoneBook.hs zawiera następujący kod:

phoneBook :: [(String, String)]

Starając się skompilować powyższy kod otrzymuję następujący błąd:

*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.

Pytanie dodany po odebraniu Brano i późniejszego komentarzu do ta odpowiedź: w jaki sposób zapewniamy implementację wyżej wymienionego typu podpisu?

Jeśli dodać to:

type phoneBook = [(String, String)]

otrzymuję następujący błąd:

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

Odpowiedz

6

Trzeba zapewnić implementację do książki telefonicznej.

phoneBook :: [(String, String)] to tylko podpis.

+0

Dlaczego przeprowadzenie egzaminu jest obowiązkowe? Jeśli tworzę aplikację haskell i jeśli jest nią telefon, nigdy nie zbiorę w niej żadnych danych. Będzie to pusta książka telefoniczna. – Optimight

+0

W jaki sposób zapewniamy implementację? – Optimight

+1

@Optymetr np. 'phoneBook = []'. Niezależnie od tego, jaką wartość tutaj wybierzesz, będzie to wartość podczas całego wykonywania programu. Zamiast definiować wartość najwyższego poziomu, 'phoneBook' powinien być prawdopodobnie parametrem funkcji lub (częścią) stanu w funkcji" State "lub" StateT ". – dave4420

1

Jeśli chcesz zadeklarować typ, musi on mieć początkową wielką literę, tj. type PhoneBook = [(String, String)].

Jeśli chcesz zadeklarować funkcję, musisz podać jej definicję (powiązanie) lub jej definicję i jej typ. Minimalny wysiłek, aby skompilować kod jest:

Następnie można zastąpić undefined z dowolnej wartości typu [(String, String)] np [("Person","Number")].