Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
This module exports TH utilities intended to be useful to users.
makeStore
can be used to generate a Store
instance for types,
when all the type variables also require Store
instances. If some
do not, then instead use TH.Derive like this:
{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE ScopedTypeVariables #-} import TH.Derive import Data.Store data Foo a = Foo a | Bar Int $($(derive [d| instance Store a => Deriving (Store (Foo a)) |]))
Note that when used with datatypes that require type variables, the ScopedTypeVariables extension is required.
One advantage of using this Template Haskell definition of Store
instances is that in some cases they can be faster than the instances
defined via Generics. Specifically, sum types which can yield
ConstSize
from size
will be faster when used in array-like types.
The instances generated via generics always use VarSize
for sum
types.
Documentation
makeStore :: Name -> Q [Dec] Source #
Given the name of a type, generate a Store instance for it, assuming that all type variables also need to be Store instances.
Note that when used with datatypes that require type variables, the ScopedTypeVariables extension is required.