radix-tree-1.0.0.0: src/Data/RadixNTree/Word8/Strict/TH.hs
{-# LANGUAGE TemplateHaskellQuotes #-}
module Data.RadixNTree.Word8.Strict.TH
( RadixTree
, sequenceCode0
, Radix1Tree
, sequenceCode1
) where
import Data.RadixNTree.Word8.Strict
import Language.Haskell.TH.Syntax
sequenceCode0 :: Quote m => RadixTree (Code m a) -> Code m (RadixTree a)
sequenceCode0 (RadixTree mx t) =
[|| RadixTree $$(sequenceMaybe mx) $$(sequenceCode1 t) ||]
sequenceCode1 :: Quote m => Radix1Tree (Code m a) -> Code m (Radix1Tree a)
sequenceCode1 t =
case t of
Bin p l r ->
[|| Bin
p
$$(sequenceCode1 l)
$$(sequenceCode1 r)
||]
Tip arr mx dx -> [|| Tip arr $$(sequenceMaybe mx) $$(sequenceCode1 dx) ||]
Nil -> [|| Nil ||]
sequenceMaybe :: Quote m => Maybe (Code m a) -> Code m (Maybe a)
sequenceMaybe mx =
case mx of
Just x -> [|| Just $$(x) ||]
Nothing -> [|| Nothing ||]