{-# language Safe #-}
module D10.Safe.Splices
(
d10ListExp
, d10ListPat
) where
import D10.Safe.Conversions (strD10ListFail)
import Control.Monad ((>=>))
import Language.Haskell.TH.Syntax (Exp (..), Pat (..), Q, dataToExpQ, dataToPatQ)
d10ListExp :: String -> Q Exp
d10ListExp :: String -> Q Exp
d10ListExp = forall (m :: * -> *). MonadFail m => String -> m [D10]
strD10ListFail forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> forall (m :: * -> *) a.
(Quote m, Data a) =>
(forall b. Data b => b -> Maybe (m Exp)) -> a -> m Exp
dataToExpQ (forall a b. a -> b -> a
const forall a. Maybe a
Nothing)
d10ListPat :: String -> Q Pat
d10ListPat :: String -> Q Pat
d10ListPat = forall (m :: * -> *). MonadFail m => String -> m [D10]
strD10ListFail forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> \[D10]
xs ->
do
[Pat]
pats <- forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (forall (m :: * -> *) a.
(Quote m, Data a) =>
(forall b. Data b => b -> Maybe (m Pat)) -> a -> m Pat
dataToPatQ (forall a b. a -> b -> a
const forall a. Maybe a
Nothing)) [D10]
xs
forall (m :: * -> *) a. Monad m => a -> m a
return ([Pat] -> Pat
ListP [Pat]
pats)