haskell-tools-ast-gen-0.1.2.0: Language/Haskell/Tools/AST/Gen/Utils.hs
-- | Utility methods for generating parts of the ADT for refactorings
{-# LANGUAGE FlexibleInstances #-}
module Language.Haskell.Tools.AST.Gen.Utils where
import Control.Reference
import Language.Haskell.Tools.AST
import Language.Haskell.Tools.AnnTrf.SourceTemplate
import Language.Haskell.Tools.AnnTrf.SourceTemplateHelpers
emptyList :: TemplateAnnot a => AnnList e a
emptyList = AnnList (fromTemplate list) []
replaceWithJust :: TemplateAnnot a => Ann e a -> AnnMaybe e a -> AnnMaybe e a
replaceWithJust e (AnnMaybe temp _) = AnnMaybe temp (Just e)
justVal :: TemplateAnnot a => Ann e a -> AnnMaybe e a
justVal e = AnnMaybe (fromTemplate opt) (Just e)
noth :: TemplateAnnot a => AnnMaybe e a
noth = AnnMaybe (fromTemplate opt) Nothing
mkAnn :: TemplateAnnot a => SourceTemplate -> e a -> Ann e a
mkAnn temp = Ann (fromTemplate temp)
-- | Annotation for a simple wrapper AST node
wrapperAnn :: TemplateAnnot a => e a -> Ann e a
wrapperAnn = mkAnn child
-- | Transforms the list of elements to an AnnList with the given source template.
mkAnnList :: TemplateAnnot a => SourceTemplate -> [Ann e a] -> AnnList e a
mkAnnList temp = AnnList (fromTemplate temp)
-- | Transforms the Maybe element to an AnnMaybe with the given source template.
mkAnnMaybe :: TemplateAnnot a => SourceTemplate -> Maybe (Ann e a) -> AnnMaybe e a
mkAnnMaybe temp = AnnMaybe (fromTemplate temp)
instance TemplateAnnot (NodeInfo (SemanticInfo n) SourceTemplate) where
fromTemplate = NodeInfo NoSemanticInfo
getTemplate = (^. sourceInfo)
instance TemplateAnnot (NodeInfo () SourceTemplate) where
fromTemplate = NodeInfo ()
getTemplate = (^. sourceInfo)