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