@@ -1,4 +1,10 @@
1−{-# LANGUAGE TemplateHaskell, ScopedTypeVariables, TypeOperators, GADTs, EmptyDataDecls, PatternGuards #-}
1+{-# LANGUAGE CPP #-}
2+{-# LANGUAGE EmptyDataDecls #-}
4+{-# LANGUAGE PatternGuards #-}
5+{-# LANGUAGE ScopedTypeVariables #-}
6+{-# LANGUAGE TemplateHaskell #-}
7+{-# LANGUAGE TypeOperators #-}
2module Reflex.Dynamic.TH (qDyn, unqDyn, mkDyn) where
8module Reflex.Dynamic.TH (qDyn, unqDyn, mkDyn) where
4import Reflex.Dynamic
10import Reflex.Dynamic
@@ -56,12 +62,22 @@ mkDynExp s = case Hs.parseExpWithMode (Hs.defaultParseMode { Hs.extensions = [ H
56 Hs.ParseFailed (Hs.SrcLoc _ l c) err -> fail $ "mkDyn:" <> show l <> ":" <> show c <> ": " <> err
62 Hs.ParseFailed (Hs.SrcLoc _ l c) err -> fail $ "mkDyn:" <> show l <> ":" <> show c <> ": " <> err
57 Hs.ParseOk e -> qDyn $ return $ everywhere (id `extT` reinstateUnqDyn) $ Hs.toExp $ everywhere (id `extT` antiE) e
63 Hs.ParseOk e -> qDyn $ return $ everywhere (id `extT` reinstateUnqDyn) $ Hs.toExp $ everywhere (id `extT` antiE) e
58 where TH.Name (TH.OccName occName) (TH.NameG _ _ (TH.ModName modName)) = 'unqMarker
64 where TH.Name (TH.OccName occName) (TH.NameG _ _ (TH.ModName modName)) = 'unqMarker
65+#if MIN_VERSION_haskell_src_exts(1,18,0)
66+ antiE :: Hs.Exp Hs.SrcSpanInfo -> Hs.Exp Hs.SrcSpanInfo
69+ Hs.App l (Hs.Var l $ Hs.Qual l (Hs.ModuleName l modName) (Hs.Ident l occName)) $ case se of
70+ Hs.IdSplice l2 v -> Hs.Var l2 $ Hs.UnQual l2 $ Hs.Ident l2 v
71+ Hs.ParenSplice _ ps -> ps
59 antiE x = case x of
74 antiE x = case x of
60 Hs.SpliceExp se ->
75 Hs.SpliceExp se ->
61 Hs.App (Hs.Var $ Hs.Qual (Hs.ModuleName modName) (Hs.Ident occName)) $ case se of
76 Hs.App (Hs.Var $ Hs.Qual (Hs.ModuleName modName) (Hs.Ident occName)) $ case se of
62 Hs.IdSplice v -> Hs.Var $ Hs.UnQual $ Hs.Ident v
77 Hs.IdSplice v -> Hs.Var $ Hs.UnQual $ Hs.Ident v
63 Hs.ParenSplice ps -> ps
78 Hs.ParenSplice ps -> ps
65 reinstateUnqDyn (TH.Name (TH.OccName occName') (TH.NameQ (TH.ModName modName')))
81 reinstateUnqDyn (TH.Name (TH.OccName occName') (TH.NameQ (TH.ModName modName')))
66 | modName == modName' && occName == occName' = 'unqMarker
82 | modName == modName' && occName == occName' = 'unqMarker
67 reinstateUnqDyn x = x
83 reinstateUnqDyn x = x