Я начал изучать Haskell и читал «Learn You Haskell». Глава 8, посвященная «созданию собственных типов и типов», и у меня есть сообщение об ошибке, которое является проблемой для меня. Вероятно, решение крошечное, но я не мог его найти, поэтому, пожалуйста, сообщите нам подсказку и помогите мне объяснить.Не удалось совместить ожидаемый тип Лицо с фактическим типом IO()
data Person = Person { firstName :: String
, lastName :: String
, age :: Int
} deriving (Eq, Show, Read)
mikeD = Person {firstName = "Michael", lastName = "Diamond", age = 43}
main = print $ read "Person {firstName =\"Michael\", lastName =\"Diamond\", age = 43}" :: Person
Это сообщение об ошибке я получаю
Couldn't match expected type `Person' with actual type `IO()'
In a stmt of a 'do' block:
print
$ read
"Person {firstName =\"Michael\", lastName =\"Diamond\", age = 43}" ::
Person
In the expression:
do { print
$ read
"Person {firstName =\"Michael\", lastName =\"Diamond\", age = 43}" ::
Person }
In an equation for `main':
main
= do { print
$ read
"Person {firstName =\"Michael\", lastName =\"Diamond\", age = 43}" ::
Person }
Спасибо заранее :)
Попробуйте добавить parens вокруг инструкции чтения. – Reactormonk
'print (читать" Person {firstName = \ "Michael \", lastName = \ "Diamond \", age = 43} ":: Person)' работает. Я надеюсь, что кто-то объяснит, почему он не эквивалентен вашей '' 'версии! Я предполагаю, что область аннотации типа является синтаксической. –
привет Jean-Baptiste, спасибо и да, работает, Tamas – bling5630