Моя программа широко использует Uniplate.Data и хочет улучшить ее производительность.Получение Uniplate с Derive
В настоящее время я получаю Data
экземпляры автоматически, используя расширение GHC DeriveDataTypeable
.
{-# LANGUAGE DeriveDataTypeable #-}
import Data.Data
import Data.Generics.Uniplate.Data
data Expr = Val Int
| Neg Expr
| Add Expr Expr
deriving (Data,Typeable)
Uniplate.Data package description рекомендуют использовать Uniplate.Direct из-за высокой производительности. Последнее требует записи явных экземпляров Uniplate
для типов данных и рекомендует для этого инструмент Derive.
При попытке получить экземпляры автоматически с помощью Derive
:
{-# LANGUAGE TemplateHaskell #-}
import Data.DeriveTH
import Data.Generics.Uniplate.Direct
data Expr = Val Int
| Neg Expr
| Add Expr Expr
$(derive makeUniplateDirect ''Expr)
Я получаю следующее сообщение об ошибке:
Exception when trying to run compile-time code:
Derivation of UniplateDirect does not yet support Template Haskell, requires info for Expr
Code: derive makeUniplateDirect ''Expr
есть ли другой способ получения Uniplate.Direct
экземпляров автоматически?
Спасибо!