"toRow" не является (видимым) методом класса "ToRow"

Я изучаю Haskell, поэтому я решил написать веб-приложение. Я выбрал PostgreSQL Simple для работы с базой данных. Я успешно подключился к нему и попробовал простые математические операции, но у меня возникли проблемы при попытке сопоставить записи с данными. Этот код не компилируется:

module Handlers.SurveyReplies where

import Database.PostgreSQL.Simple

data AnswersSet = AnswersSet {
  sex ∷ Integer,
  ageRange ∷ Integer,
  country ∷ Integer,
  commune ∷ Maybe Integer
} deriving (Show)

instance FromRow AnswersSet where
  fromRow = AnswersSet <$> field <*> field <*> field <*> field

instance ToRow AnswersSet where
toRow r = [toField (sex r), toField (ageRange r), toField (country r), toField (commune r)]

Ошибка:

    ‘fromRow’ is not a (visible) method of class ‘FromRow’
   |
17 |   fromRow = AnswersSet <$> field <*> field <*> field <*> field
   |   ^^^^^^^

А также:

    ‘toRow’ is not a (visible) method of class ‘ToRow’
   |
20 |         toRow r = [toField (sex r), toField (ageRange r), toField (country r), toField (commune r)]
   |         ^^^^^

Я посмотрел несколько примеров проектов ( среди прочего), но я не понимаю, что я делаю неправильно:(

1 ответ

Решение

Модуль Database.PostgreSQL.Simple экспортирует только классы типов ToRow а также FromRowбез каких-либо их методов.

Для этих методов вам нужно импортировать модули Database.PostgreSQL.Simple.ToRow а также Database.PostgreSQL.Simple.FromRow, как это делается в примере, на который вы ссылаетесь.

Другие вопросы по тегам