Я новичок в Haskell и функциональном программировании в целом. В настоящее время я изучаю пользовательские типы данных и имею следующее:
data Point = Pt Double Double deriving (Show, Eq)
getValue :: Point -> Double
getValue (Pt a _) = a
Я пытаюсь вернуть только одно из двойных значений из пользовательского типа данных, но столкнулся с проблемой. Моя консоль выдает следующую ошибку всякий раз, когда я пытаюсь извлечь одно из своих значений баллов: «Не удалось сопоставить ожидаемый тип Integer -> Integer -> t
». Любые идеи относительно того, что я делаю неправильно?
(редактирование из комментариев OP:) Я набрал следующее в GHCi
test Pt 1.0 1.0
Вот все сообщение об ошибке:
• Couldn't match expected type ‘Integer -> Integer -> t’
with actual type ‘Double’
• The function ‘test’ is applied to three arguments,
but its type ‘Point -> Double’ has only one
In the expression:
test Pt 1 1
In an equation for ‘it’:
it = test Pt 1 1
• Relevant bindings include
it :: t (bound at <interactive>:497:1)
test
— это то, что я переименовал в getValue
.
Integer
s, когда все основные типы в вашем коде —Double
s. Пожалуйста, предоставьте точный код, который вы используете (я подозреваю, что их больше, и настоящая ошибка находится в другом месте). - person Robin Zigmond   schedule 12.10.2019test
, но этого достаточно, чтобы понять проблему - ты явно хочешь сделатьtest (Pt 1.0 1.0)
.test Pt 1.0 1.0
без круглых скобок интерпретируется как применение функцииtest
к трем аргументамPt
,1.0
и1.0
, что не имеет смысла, и именно поэтому GHC жалуется. - person Robin Zigmond   schedule 12.10.2019