Как извлечь информацию из пользовательского типа данных - PullRequest
2 голосов
/ 12 октября 2019

Я новичок в Хаскеле и функциональном программировании в целом. В настоящее время я изучаю пользовательские типы данных и имею следующее:

data Point = Pt Double Double deriving (Show, Eq)

getValue :: Point -> Double

getValue (Pt a _) = a

Я пытаюсь вернуть только одно из двойных значений из пользовательского типа данных, но столкнулся с проблемой. Моя консоль выдает мне следующую ошибку всякий раз, когда я пытаюсь извлечь одно из моих значений точек: « Не удалось найти ожидаемый тип Integer -> Integer -> t». Любые идеи относительно того, что я делаю неправильно?


( редактировать из комментариев ОП: ) Я набрал следующее в 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 в.

1 Ответ

1 голос
/ 13 октября 2019

вы явно хотите сделать test (Pt 1.0 1.0).

test Pt 1.0 1.0 без скобок интерпретируется как применение функции test к 3 аргументам Pt, 1.0 и 1.0, что не имеет смысла и именно поэтому GHC жалуется. - Робин Зигмонд , вчера

...