Удобная обертка в кислотном состоянии без шаблона haskell?

В acid-state учебнике во всех примерах используется Template Haskell. Однако из-за некоторых причин я не очень хочу его использовать.

Я знаю, что кислотное состояние можно использовать без шаблона haskell, как показано здесь:
http://mirror.seize.it/acid-state/examples/HelloWorldNoTH.hs

но я блуждаю, есть ли какие-либо удобные оболочки или библиотеки, которые помогают упростить использование кислотного состояния (без использования шаблона haskell)?

P.S.: Моя цель - реализовать уровень базы данных для веб-приложения.


person Andriy Drozdyuk    schedule 03.08.2012    source источник
comment
В этом случае TH является удобной оболочкой, которую вы ищете. Обычно я на стороне ограничения использования Template Haskell (как и ребята из Happstack, на самом деле), но это очень безопасное и правильное использование, IMO.   -  person mightybyte    schedule 03.08.2012
comment
Просто нет предопределенного синтаксиса, когда дело доходит до TH — и все эти '' просто выглядят странно и трудно читаемы (с волшебными вариантами в верхнем регистре, появляющимися повсюду).   -  person Andriy Drozdyuk    schedule 03.08.2012
comment
Существует предопределенный синтаксис для такого использования TH. Квазикавычки - это то место, где у вас нет предопределенного синтаксиса, но здесь нет квазикавычек.   -  person mightybyte    schedule 04.08.2012


Ответы (1)


Вы не можете написать функцию, которая создает экземпляр для чего-то, поэтому Acid-State использует Template Haskell.

Разработчики Acid-State ранее упоминали, что им не нужно было бы использовать TH, если бы GHC добавил поддержку автоматического получения классов (как data SomeData = Foo | Bar deriving (Show))

Многие из пунктов, перечисленных против TH в посте, на который вы ссылаетесь, применяются только при определенных обстоятельствах (например, вы можете быть уверены, что функции Acid-State TH не запустят никаких ракет)

Я действительно не думаю, что вам следует слишком беспокоиться об использовании TH — иногда это может быть полезно!

person tazjin    schedule 03.08.2012
comment
Спасибо. извините за глупый вопрос, но что делают производные классы? - person Andriy Drozdyuk; 03.08.2012
comment
Он автоматически добавляет экземпляр класса. В приведенном выше примере tazjin это означает, что вам не нужно писать instance Show SomeData where showsPrec _ Foo = showString "Foo"; showsPrec _ Bar = showString "Bar"; GHC создаст этот экземпляр автоматически. Было бы неплохо, если бы вы также могли написать deriving (Acid) или что-то подобное. - person dflemstr; 03.08.2012
comment
О, я вижу. Еще один тупой вопрос: почему это нельзя включить с помощью языковых расширений, то есть тех вещей, что в {-# #-} - person Andriy Drozdyuk; 03.08.2012
comment
На самом деле это возможно с помощью Generics, но адаптера для acid-state еще никто не делал, насколько я знаю. И использование Generics медленнее, чем использование TH. - person dflemstr; 03.08.2012