Я пытаюсь заставить голову обернуться вокруг Стойкий, и одна из вещей, которую я пытаюсь изучить, это derivePersistField
шаблон haskell. Теперь я понимаю, что существует ограничение на сцену, заставляя GHC отображать остальную часть кода, который должен генерировать квазикватер, но мой просто не делает этого. GHC продолжает жаловаться, что вызов функции находится на верхнем уровне, но я еще не знаю, чтобы генерировать фактические типы данных + хорошие биты. Вот мой код (взято непосредственно из книги Йесод на Persistent):Обнаженное выражение на верхнем уровне для простого эксперимента Template Haskell
--Employment.hs ----
module Employment where
import Database.Persist.TH
data Employment = Employed | Unemployed | Retired
deriving (Show, Read, Eq)
derivePersistField "Employment"
--main.hs ----------
{-# LANGUAGE QuasiQuotes, TypeFamilies, GeneralizedNewtypeDeriving, TemplateHaskell,
OverloadedStrings, GADTs, FlexibleContexts #-}
import Database.Persist.Sqlite
import Database.Persist.TH
import Employment
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Person
name String
employment Employment
|]
main = runSqlite ":memory:" $ do
runMigration migrateAll
insert $ Person "Bruce Wayne" Retired
insert $ Person "Peter Parker" Unemployed
insert $ Person "Michael" Employed
Что еще мне не хватает? Нужно ли добавлять языковые расширения в модуль? Любая помощь будет принята с благодарностью!
Вам нужно поставить вызовы функций верхнего уровня в выражении TH: '$ (derivePersistField« Занятость »)'. Или, может быть, '$ (derivePersistField '' Employment)' (двойной тик цитирует тип) То же самое для вызова 'share', я думаю. – luqui