{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE CPP #-} -- -- DefBitRep.hs --- Template Haskell utilities. -- -- Copyright (C) 2013, Galois, Inc. -- All Rights Reserved. -- module Ivory.Language.BitData.DefBitRep where import Language.Haskell.TH -- | Define the type instance: -- -- type instance = -- -- for each "n" in "xs". -- -- Used to define the set of representation types for bit lengths. defBitRep :: Name -> Name -> [Integer] -> DecsQ defBitRep fname rname xs = return $ map go xs where #if __GLASGOW_HASKELL__ >= 708 go n = TySynInstD fname (TySynEqn [LitT (NumTyLit n)] (ConT rname)) #else go n = TySynInstD fname [LitT (NumTyLit n)] (ConT rname) #endif