{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE InstanceSigs          #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RecordWildCards       #-}
{-# LANGUAGE ScopedTypeVariables   #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE StrictData            #-}
{-# LANGUAGE TypeFamilies          #-}
module Language.Cimple.MapAst
    ( mapAst

    , doFiles, doFile
    , doNodes, doNode
    , doComment, doComments
    , doLexemes, doLexeme
    , doText

    , astActions
    , TextActions, textActions
    , IdentityActions, identityActions
    ) where

import           Data.Fix              (Fix (..))
import           Language.Cimple.Ast   (Comment, CommentF (..), Node,
                                        NodeF (..))
import           Language.Cimple.Lexer (Lexeme (..))

class MapAst itext otext a where
    type Mapped itext otext a
    mapFileAst
        :: Applicative f
        => AstActions f itext otext
        -> FilePath
        -> a
        -> f (Mapped itext otext a)

mapAst
    :: (MapAst itext otext    a, Applicative f)
    => AstActions f itext otext -> a
    -> f    (Mapped itext otext    a)
mapAst :: AstActions f itext otext -> a -> f (Mapped itext otext a)
mapAst = (AstActions f itext otext
 -> FilePath -> a -> f (Mapped itext otext a))
-> FilePath
-> AstActions f itext otext
-> a
-> f (Mapped itext otext a)
forall a b c. (a -> b -> c) -> b -> a -> c
flip AstActions f itext otext
-> FilePath -> a -> f (Mapped itext otext a)
forall itext otext a (f :: * -> *).
(MapAst itext otext a, Applicative f) =>
AstActions f itext otext
-> FilePath -> a -> f (Mapped itext otext a)
mapFileAst FilePath
"<stdin>"

data AstActions f itext otext = AstActions
    { AstActions f itext otext
-> [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
doFiles     :: [(FilePath, [Node    (Lexeme itext)])] -> f [(FilePath, [Node    (Lexeme otext)])] -> f [(FilePath, [Node    (Lexeme otext)])]
    , AstActions f itext otext
-> (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFile      ::  (FilePath, [Node    (Lexeme itext)])  -> f  (FilePath, [Node    (Lexeme otext)])  -> f  (FilePath, [Node    (Lexeme otext)])
    , AstActions f itext otext
-> FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doNodes     :: FilePath -> [Node    (Lexeme itext)]   -> f             [Node    (Lexeme otext)]   -> f             [Node    (Lexeme otext)]
    , AstActions f itext otext
-> FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNode      :: FilePath ->  Node    (Lexeme itext)    -> f             (Node    (Lexeme otext))   -> f             (Node    (Lexeme otext))
    , AstActions f itext otext
-> FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doComment   :: FilePath ->  Comment (Lexeme itext)    -> f             (Comment (Lexeme otext))   -> f             (Comment (Lexeme otext))
    , AstActions f itext otext
-> FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComments  :: FilePath -> [Comment (Lexeme itext)]   -> f             [Comment (Lexeme otext)]   -> f             [Comment (Lexeme otext)]
    , AstActions f itext otext
-> FilePath
-> [Lexeme itext]
-> f [Lexeme otext]
-> f [Lexeme otext]
doLexemes   :: FilePath ->          [Lexeme itext]    -> f                      [Lexeme otext]    -> f                      [Lexeme otext]
    , AstActions f itext otext
-> FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexeme    :: FilePath ->           Lexeme itext     -> f                      (Lexeme otext)    -> f                      (Lexeme otext)
    , AstActions f itext otext -> FilePath -> itext -> f otext
doText      :: FilePath ->                  itext                                                 -> f                              otext
    }

instance MapAst itext otext        a
      => MapAst itext otext (Maybe a) where
    type        Mapped itext otext (Maybe a)
       = Maybe (Mapped itext otext        a)
    mapFileAst :: AstActions f itext otext
-> FilePath -> Maybe a -> f (Mapped itext otext (Maybe a))
mapFileAst AstActions f itext otext
_       FilePath
_           Maybe a
Nothing  = Maybe (Mapped itext otext a) -> f (Maybe (Mapped itext otext a))
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe (Mapped itext otext a)
forall a. Maybe a
Nothing
    mapFileAst AstActions f itext otext
actions FilePath
currentFile (Just a
x) = Mapped itext otext a -> Maybe (Mapped itext otext a)
forall a. a -> Maybe a
Just (Mapped itext otext a -> Maybe (Mapped itext otext a))
-> f (Mapped itext otext a) -> f (Maybe (Mapped itext otext a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> AstActions f itext otext
-> FilePath -> a -> f (Mapped itext otext a)
forall itext otext a (f :: * -> *).
(MapAst itext otext a, Applicative f) =>
AstActions f itext otext
-> FilePath -> a -> f (Mapped itext otext a)
mapFileAst AstActions f itext otext
actions FilePath
currentFile a
x

astActions
    :: Applicative f
    => (itext -> f otext)
    -> AstActions f itext otext
astActions :: (itext -> f otext) -> AstActions f itext otext
astActions itext -> f otext
ft = AstActions :: forall (f :: * -> *) itext otext.
([(FilePath, [Node (Lexeme itext)])]
 -> f [(FilePath, [Node (Lexeme otext)])]
 -> f [(FilePath, [Node (Lexeme otext)])])
-> ((FilePath, [Node (Lexeme itext)])
    -> f (FilePath, [Node (Lexeme otext)])
    -> f (FilePath, [Node (Lexeme otext)]))
-> (FilePath
    -> [Node (Lexeme itext)]
    -> f [Node (Lexeme otext)]
    -> f [Node (Lexeme otext)])
-> (FilePath
    -> Node (Lexeme itext)
    -> f (Node (Lexeme otext))
    -> f (Node (Lexeme otext)))
-> (FilePath
    -> Comment (Lexeme itext)
    -> f (Comment (Lexeme otext))
    -> f (Comment (Lexeme otext)))
-> (FilePath
    -> [Comment (Lexeme itext)]
    -> f [Comment (Lexeme otext)]
    -> f [Comment (Lexeme otext)])
-> (FilePath
    -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext])
-> (FilePath
    -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext))
-> (FilePath -> itext -> f otext)
-> AstActions f itext otext
AstActions
    { doFiles :: [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
doFiles     = (f [(FilePath, [Node (Lexeme otext)])]
 -> f [(FilePath, [Node (Lexeme otext)])])
-> [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
forall a b. a -> b -> a
const f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
forall a. a -> a
id
    , doFile :: (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFile      = (f (FilePath, [Node (Lexeme otext)])
 -> f (FilePath, [Node (Lexeme otext)]))
-> (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
forall a b. a -> b -> a
const f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
forall a. a -> a
id
    , doNodes :: FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doNodes     = ([Node (Lexeme itext)]
 -> f [Node (Lexeme otext)] -> f [Node (Lexeme otext)])
-> FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
forall a b. a -> b -> a
const (([Node (Lexeme itext)]
  -> f [Node (Lexeme otext)] -> f [Node (Lexeme otext)])
 -> FilePath
 -> [Node (Lexeme itext)]
 -> f [Node (Lexeme otext)]
 -> f [Node (Lexeme otext)])
-> ([Node (Lexeme itext)]
    -> f [Node (Lexeme otext)] -> f [Node (Lexeme otext)])
-> FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
forall a b. (a -> b) -> a -> b
$ (f [Node (Lexeme otext)] -> f [Node (Lexeme otext)])
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
forall a b. a -> b -> a
const f [Node (Lexeme otext)] -> f [Node (Lexeme otext)]
forall a. a -> a
id
    , doNode :: FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNode      = (Node (Lexeme itext)
 -> f (Node (Lexeme otext)) -> f (Node (Lexeme otext)))
-> FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
forall a b. a -> b -> a
const ((Node (Lexeme itext)
  -> f (Node (Lexeme otext)) -> f (Node (Lexeme otext)))
 -> FilePath
 -> Node (Lexeme itext)
 -> f (Node (Lexeme otext))
 -> f (Node (Lexeme otext)))
-> (Node (Lexeme itext)
    -> f (Node (Lexeme otext)) -> f (Node (Lexeme otext)))
-> FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
forall a b. (a -> b) -> a -> b
$ (f (Node (Lexeme otext)) -> f (Node (Lexeme otext)))
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
forall a b. a -> b -> a
const f (Node (Lexeme otext)) -> f (Node (Lexeme otext))
forall a. a -> a
id
    , doComment :: FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doComment   = (Comment (Lexeme itext)
 -> f (Comment (Lexeme otext)) -> f (Comment (Lexeme otext)))
-> FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
forall a b. a -> b -> a
const ((Comment (Lexeme itext)
  -> f (Comment (Lexeme otext)) -> f (Comment (Lexeme otext)))
 -> FilePath
 -> Comment (Lexeme itext)
 -> f (Comment (Lexeme otext))
 -> f (Comment (Lexeme otext)))
-> (Comment (Lexeme itext)
    -> f (Comment (Lexeme otext)) -> f (Comment (Lexeme otext)))
-> FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
forall a b. (a -> b) -> a -> b
$ (f (Comment (Lexeme otext)) -> f (Comment (Lexeme otext)))
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
forall a b. a -> b -> a
const f (Comment (Lexeme otext)) -> f (Comment (Lexeme otext))
forall a. a -> a
id
    , doComments :: FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComments  = ([Comment (Lexeme itext)]
 -> f [Comment (Lexeme otext)] -> f [Comment (Lexeme otext)])
-> FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
forall a b. a -> b -> a
const (([Comment (Lexeme itext)]
  -> f [Comment (Lexeme otext)] -> f [Comment (Lexeme otext)])
 -> FilePath
 -> [Comment (Lexeme itext)]
 -> f [Comment (Lexeme otext)]
 -> f [Comment (Lexeme otext)])
-> ([Comment (Lexeme itext)]
    -> f [Comment (Lexeme otext)] -> f [Comment (Lexeme otext)])
-> FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
forall a b. (a -> b) -> a -> b
$ (f [Comment (Lexeme otext)] -> f [Comment (Lexeme otext)])
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
forall a b. a -> b -> a
const f [Comment (Lexeme otext)] -> f [Comment (Lexeme otext)]
forall a. a -> a
id
    , doLexeme :: FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexeme    = (Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext))
-> FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
forall a b. a -> b -> a
const ((Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext))
 -> FilePath
 -> Lexeme itext
 -> f (Lexeme otext)
 -> f (Lexeme otext))
-> (Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext))
-> FilePath
-> Lexeme itext
-> f (Lexeme otext)
-> f (Lexeme otext)
forall a b. (a -> b) -> a -> b
$ (f (Lexeme otext) -> f (Lexeme otext))
-> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
forall a b. a -> b -> a
const f (Lexeme otext) -> f (Lexeme otext)
forall a. a -> a
id
    , doLexemes :: FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
doLexemes   = ([Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext])
-> FilePath
-> [Lexeme itext]
-> f [Lexeme otext]
-> f [Lexeme otext]
forall a b. a -> b -> a
const (([Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext])
 -> FilePath
 -> [Lexeme itext]
 -> f [Lexeme otext]
 -> f [Lexeme otext])
-> ([Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext])
-> FilePath
-> [Lexeme itext]
-> f [Lexeme otext]
-> f [Lexeme otext]
forall a b. (a -> b) -> a -> b
$ (f [Lexeme otext] -> f [Lexeme otext])
-> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
forall a b. a -> b -> a
const f [Lexeme otext] -> f [Lexeme otext]
forall a. a -> a
id
    , doText :: FilePath -> itext -> f otext
doText      = (itext -> f otext) -> FilePath -> itext -> f otext
forall a b. a -> b -> a
const itext -> f otext
ft
    }

type TextActions f itext otext = AstActions f itext otext
textActions :: Applicative f => (itext -> f otext) -> TextActions f itext otext
textActions :: (itext -> f otext) -> TextActions f itext otext
textActions = (itext -> f otext) -> TextActions f itext otext
forall (f :: * -> *) itext otext.
Applicative f =>
(itext -> f otext) -> AstActions f itext otext
astActions

type IdentityActions f text = AstActions f text text
identityActions :: Applicative f => AstActions f text text
identityActions :: AstActions f text text
identityActions = (text -> f text) -> AstActions f text text
forall (f :: * -> *) itext otext.
Applicative f =>
(itext -> f otext) -> AstActions f itext otext
astActions text -> f text
forall (f :: * -> *) a. Applicative f => a -> f a
pure


instance MapAst itext otext (Lexeme itext) where
    type Mapped itext otext (Lexeme itext)
                          =  Lexeme otext
    mapFileAst :: forall f . Applicative f
               => AstActions f itext otext -> FilePath -> Lexeme itext -> f (Lexeme otext)
    mapFileAst :: AstActions f itext otext
-> FilePath -> Lexeme itext -> f (Lexeme otext)
mapFileAst AstActions{FilePath -> itext -> f otext
FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
[(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
(FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doText :: FilePath -> itext -> f otext
doLexeme :: FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
doComments :: FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
doText :: forall (f :: * -> *) itext otext.
AstActions f itext otext -> FilePath -> itext -> f otext
doLexeme :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Lexeme itext]
-> f [Lexeme otext]
-> f [Lexeme otext]
doComments :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
..} FilePath
currentFile = FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexeme FilePath
currentFile (Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext))
-> (Lexeme itext -> f (Lexeme otext))
-> Lexeme itext
-> f (Lexeme otext)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
        \(L AlexPosn
p LexemeClass
c itext
s) -> AlexPosn -> LexemeClass -> otext -> Lexeme otext
forall text. AlexPosn -> LexemeClass -> text -> Lexeme text
L AlexPosn
p LexemeClass
c (otext -> Lexeme otext) -> f otext -> f (Lexeme otext)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FilePath -> itext -> f otext
doText FilePath
currentFile itext
s

instance MapAst itext otext [Lexeme itext] where
    type Mapped itext otext [Lexeme itext]
                          = [Lexeme otext]
    mapFileAst :: AstActions f itext otext
-> FilePath
-> [Lexeme itext]
-> f (Mapped itext otext [Lexeme itext])
mapFileAst actions :: AstActions f itext otext
actions@AstActions{FilePath -> itext -> f otext
FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
[(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
(FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doText :: FilePath -> itext -> f otext
doLexeme :: FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
doComments :: FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
doText :: forall (f :: * -> *) itext otext.
AstActions f itext otext -> FilePath -> itext -> f otext
doLexeme :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Lexeme itext]
-> f [Lexeme otext]
-> f [Lexeme otext]
doComments :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
..} FilePath
currentFile = FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
doLexemes FilePath
currentFile ([Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext])
-> ([Lexeme itext] -> f [Lexeme otext])
-> [Lexeme itext]
-> f [Lexeme otext]
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
        (Lexeme itext -> f (Lexeme otext))
-> [Lexeme itext] -> f [Lexeme otext]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (AstActions f itext otext
-> FilePath
-> Lexeme itext
-> f (Mapped itext otext (Lexeme itext))
forall itext otext a (f :: * -> *).
(MapAst itext otext a, Applicative f) =>
AstActions f itext otext
-> FilePath -> a -> f (Mapped itext otext a)
mapFileAst AstActions f itext otext
actions FilePath
currentFile)

instance MapAst itext otext (Comment (Lexeme itext)) where
    type Mapped itext otext (Comment (Lexeme itext))
                          =  Comment (Lexeme otext)
    mapFileAst
        :: forall f . Applicative f
        => AstActions f itext otext
        -> FilePath
        ->    Comment (Lexeme itext)
        -> f (Comment (Lexeme otext))
    mapFileAst :: AstActions f itext otext
-> FilePath -> Comment (Lexeme itext) -> f (Comment (Lexeme otext))
mapFileAst actions :: AstActions f itext otext
actions@AstActions{FilePath -> itext -> f otext
FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
[(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
(FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doText :: FilePath -> itext -> f otext
doLexeme :: FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
doComments :: FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
doText :: forall (f :: * -> *) itext otext.
AstActions f itext otext -> FilePath -> itext -> f otext
doLexeme :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Lexeme itext]
-> f [Lexeme otext]
-> f [Lexeme otext]
doComments :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
..} FilePath
currentFile = FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doComment FilePath
currentFile (Comment (Lexeme itext)
 -> f (Comment (Lexeme otext)) -> f (Comment (Lexeme otext)))
-> (Comment (Lexeme itext) -> f (Comment (Lexeme otext)))
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> \Comment (Lexeme itext)
comment -> case Comment (Lexeme itext)
-> CommentF (Lexeme itext) (Comment (Lexeme itext))
forall (f :: * -> *). Fix f -> f (Fix f)
unFix Comment (Lexeme itext)
comment of
        DocComment [Comment (Lexeme itext)]
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Comment (Lexeme otext)]
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. [a] -> CommentF lexeme a
DocComment ([Comment (Lexeme otext)]
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
docs)
        DocWord Lexeme itext
word ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. lexeme -> CommentF lexeme a
DocWord (Lexeme otext -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Lexeme otext)
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
word)
        DocSentence [Comment (Lexeme itext)]
docs Lexeme itext
ending ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Comment (Lexeme otext)]
-> Lexeme otext -> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. [a] -> lexeme -> CommentF lexeme a
DocSentence ([Comment (Lexeme otext)]
 -> Lexeme otext
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (Lexeme otext
      -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
docs f (Lexeme otext
   -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Lexeme otext)
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
ending)
        CommentF (Lexeme itext) (Comment (Lexeme itext))
DocNewline -> Comment (Lexeme otext) -> f (Comment (Lexeme otext))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Comment (Lexeme otext) -> f (Comment (Lexeme otext)))
-> Comment (Lexeme otext) -> f (Comment (Lexeme otext))
forall a b. (a -> b) -> a -> b
$ CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. CommentF lexeme a
DocNewline

        DocAttention [Comment (Lexeme itext)]
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Comment (Lexeme otext)]
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. [a] -> CommentF lexeme a
DocAttention ([Comment (Lexeme otext)]
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
docs)
        DocBrief [Comment (Lexeme itext)]
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Comment (Lexeme otext)]
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. [a] -> CommentF lexeme a
DocBrief ([Comment (Lexeme otext)]
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
docs)
        DocDeprecated [Comment (Lexeme itext)]
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Comment (Lexeme otext)]
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. [a] -> CommentF lexeme a
DocDeprecated ([Comment (Lexeme otext)]
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
docs)
        DocExtends Lexeme itext
feat ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. lexeme -> CommentF lexeme a
DocExtends (Lexeme otext -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Lexeme otext)
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
feat)
        DocImplements Lexeme itext
feat ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. lexeme -> CommentF lexeme a
DocImplements (Lexeme otext -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Lexeme otext)
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
feat)
        DocParam Maybe (Lexeme itext)
attr Lexeme itext
name [Comment (Lexeme itext)]
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Maybe (Lexeme otext)
-> Lexeme otext
-> [Comment (Lexeme otext)]
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. Maybe lexeme -> lexeme -> [a] -> CommentF lexeme a
DocParam (Maybe (Lexeme otext)
 -> Lexeme otext
 -> [Comment (Lexeme otext)]
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Maybe (Lexeme otext))
-> f (Lexeme otext
      -> [Comment (Lexeme otext)]
      -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (Lexeme itext)
-> f (Mapped itext otext (Maybe (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Maybe (Lexeme itext)
attr f (Lexeme otext
   -> [Comment (Lexeme otext)]
   -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Comment (Lexeme otext)]
      -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name f ([Comment (Lexeme otext)]
   -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
docs)
        DocReturn [Comment (Lexeme itext)]
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Comment (Lexeme otext)]
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. [a] -> CommentF lexeme a
DocReturn ([Comment (Lexeme otext)]
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
docs)
        DocRetval Lexeme itext
expr [Comment (Lexeme itext)]
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> [Comment (Lexeme otext)]
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. lexeme -> [a] -> CommentF lexeme a
DocRetval (Lexeme otext
 -> [Comment (Lexeme otext)]
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Comment (Lexeme otext)]
      -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
expr f ([Comment (Lexeme otext)]
   -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
docs)
        DocSee Lexeme itext
ref [Comment (Lexeme itext)]
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> [Comment (Lexeme otext)]
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. lexeme -> [a] -> CommentF lexeme a
DocSee (Lexeme otext
 -> [Comment (Lexeme otext)]
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Comment (Lexeme otext)]
      -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
ref f ([Comment (Lexeme otext)]
   -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
docs)

        CommentF (Lexeme itext) (Comment (Lexeme itext))
DocPrivate -> Comment (Lexeme otext) -> f (Comment (Lexeme otext))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Comment (Lexeme otext) -> f (Comment (Lexeme otext)))
-> Comment (Lexeme otext) -> f (Comment (Lexeme otext))
forall a b. (a -> b) -> a -> b
$ CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. CommentF lexeme a
DocPrivate

        DocParagraph [Comment (Lexeme itext)]
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Comment (Lexeme otext)]
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. [a] -> CommentF lexeme a
DocParagraph ([Comment (Lexeme otext)]
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
docs)
        DocLine [Comment (Lexeme itext)]
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Comment (Lexeme otext)]
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. [a] -> CommentF lexeme a
DocLine ([Comment (Lexeme otext)]
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
docs)
        DocList [Comment (Lexeme itext)]
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Comment (Lexeme otext)]
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. [a] -> CommentF lexeme a
DocList ([Comment (Lexeme otext)]
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
docs)
        DocOLItem Lexeme itext
docs [Comment (Lexeme itext)]
sublist ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> [Comment (Lexeme otext)]
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. lexeme -> [a] -> CommentF lexeme a
DocOLItem (Lexeme otext
 -> [Comment (Lexeme otext)]
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Comment (Lexeme otext)]
      -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
docs f ([Comment (Lexeme otext)]
   -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
sublist)
        DocULItem [Comment (Lexeme itext)]
docs [Comment (Lexeme itext)]
sublist ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Comment (Lexeme otext)]
-> [Comment (Lexeme otext)]
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. [a] -> [a] -> CommentF lexeme a
DocULItem ([Comment (Lexeme otext)]
 -> [Comment (Lexeme otext)]
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f ([Comment (Lexeme otext)]
      -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
docs f ([Comment (Lexeme otext)]
   -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f [Comment (Lexeme otext)]
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Comment (Lexeme itext)]
sublist)

        DocColon Lexeme itext
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. lexeme -> CommentF lexeme a
DocColon (Lexeme otext -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Lexeme otext)
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
docs)
        DocRef Lexeme itext
doc ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. lexeme -> CommentF lexeme a
DocRef (Lexeme otext -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Lexeme otext)
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
doc)
        DocP Lexeme itext
doc ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. lexeme -> CommentF lexeme a
DocP (Lexeme otext -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Lexeme otext)
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
doc)
        DocLParen Comment (Lexeme itext)
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Comment (Lexeme otext)
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. a -> CommentF lexeme a
DocLParen (Comment (Lexeme otext)
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Comment (Lexeme itext)
-> f (Mapped itext otext (Comment (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Comment (Lexeme itext)
docs)
        DocRParen Comment (Lexeme itext)
docs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Comment (Lexeme otext)
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. a -> CommentF lexeme a
DocRParen (Comment (Lexeme otext)
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Comment (Lexeme itext)
-> f (Mapped itext otext (Comment (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Comment (Lexeme itext)
docs)
        DocAssignOp AssignOp
op Comment (Lexeme itext)
lhs Comment (Lexeme itext)
rhs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (AssignOp
-> Comment (Lexeme otext)
-> Comment (Lexeme otext)
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. AssignOp -> a -> a -> CommentF lexeme a
DocAssignOp AssignOp
op (Comment (Lexeme otext)
 -> Comment (Lexeme otext)
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext)
      -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Comment (Lexeme itext)
-> f (Mapped itext otext (Comment (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Comment (Lexeme itext)
lhs f (Comment (Lexeme otext)
   -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Comment (Lexeme itext)
-> f (Mapped itext otext (Comment (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Comment (Lexeme itext)
rhs)
        DocBinaryOp BinaryOp
op Comment (Lexeme itext)
lhs Comment (Lexeme itext)
rhs ->
            CommentF (Lexeme otext) (Comment (Lexeme otext))
-> Comment (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (CommentF (Lexeme otext) (Comment (Lexeme otext))
 -> Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (BinaryOp
-> Comment (Lexeme otext)
-> Comment (Lexeme otext)
-> CommentF (Lexeme otext) (Comment (Lexeme otext))
forall lexeme a. BinaryOp -> a -> a -> CommentF lexeme a
DocBinaryOp BinaryOp
op (Comment (Lexeme otext)
 -> Comment (Lexeme otext)
 -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext)
      -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Comment (Lexeme itext)
-> f (Mapped itext otext (Comment (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Comment (Lexeme itext)
lhs f (Comment (Lexeme otext)
   -> CommentF (Lexeme otext) (Comment (Lexeme otext)))
-> f (Comment (Lexeme otext))
-> f (CommentF (Lexeme otext) (Comment (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Comment (Lexeme itext)
-> f (Mapped itext otext (Comment (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Comment (Lexeme itext)
rhs)

      where
        recurse :: MapAst itext otext a => a -> f (Mapped itext otext a)
        recurse :: a -> f (Mapped itext otext a)
recurse = AstActions f itext otext
-> FilePath -> a -> f (Mapped itext otext a)
forall itext otext a (f :: * -> *).
(MapAst itext otext a, Applicative f) =>
AstActions f itext otext
-> FilePath -> a -> f (Mapped itext otext a)
mapFileAst AstActions f itext otext
actions FilePath
currentFile

instance MapAst itext otext [Comment (Lexeme itext)] where
    type Mapped itext otext [Comment (Lexeme itext)]
                          = [Comment (Lexeme otext)]
    mapFileAst :: AstActions f itext otext
-> FilePath
-> [Comment (Lexeme itext)]
-> f (Mapped itext otext [Comment (Lexeme itext)])
mapFileAst actions :: AstActions f itext otext
actions@AstActions{FilePath -> itext -> f otext
FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
[(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
(FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doText :: FilePath -> itext -> f otext
doLexeme :: FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
doComments :: FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
doText :: forall (f :: * -> *) itext otext.
AstActions f itext otext -> FilePath -> itext -> f otext
doLexeme :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Lexeme itext]
-> f [Lexeme otext]
-> f [Lexeme otext]
doComments :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
..} FilePath
currentFile = FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComments FilePath
currentFile ([Comment (Lexeme itext)]
 -> f [Comment (Lexeme otext)] -> f [Comment (Lexeme otext)])
-> ([Comment (Lexeme itext)] -> f [Comment (Lexeme otext)])
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
        (Comment (Lexeme itext) -> f (Comment (Lexeme otext)))
-> [Comment (Lexeme itext)] -> f [Comment (Lexeme otext)]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (AstActions f itext otext
-> FilePath
-> Comment (Lexeme itext)
-> f (Mapped itext otext (Comment (Lexeme itext)))
forall itext otext a (f :: * -> *).
(MapAst itext otext a, Applicative f) =>
AstActions f itext otext
-> FilePath -> a -> f (Mapped itext otext a)
mapFileAst AstActions f itext otext
actions FilePath
currentFile)


instance MapAst itext otext (Node (Lexeme itext)) where
    type Mapped itext otext (Node (Lexeme itext))
                          =  Node (Lexeme otext)
    mapFileAst
        :: forall f . Applicative f
        => AstActions f itext otext
        -> FilePath
        ->    Node (Lexeme itext)
        -> f (Node (Lexeme otext))
    mapFileAst :: AstActions f itext otext
-> FilePath -> Node (Lexeme itext) -> f (Node (Lexeme otext))
mapFileAst actions :: AstActions f itext otext
actions@AstActions{FilePath -> itext -> f otext
FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
[(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
(FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doText :: FilePath -> itext -> f otext
doLexeme :: FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
doComments :: FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
doText :: forall (f :: * -> *) itext otext.
AstActions f itext otext -> FilePath -> itext -> f otext
doLexeme :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Lexeme itext]
-> f [Lexeme otext]
-> f [Lexeme otext]
doComments :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
..} FilePath
currentFile = FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNode FilePath
currentFile (Node (Lexeme itext)
 -> f (Node (Lexeme otext)) -> f (Node (Lexeme otext)))
-> (Node (Lexeme itext) -> f (Node (Lexeme otext)))
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> \Node (Lexeme itext)
node -> case Node (Lexeme itext) -> NodeF (Lexeme itext) (Node (Lexeme itext))
forall (f :: * -> *). Fix f -> f (Fix f)
unFix Node (Lexeme itext)
node of
        PreprocInclude Lexeme itext
path ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> NodeF lexeme a
PreprocInclude (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
path)
        PreprocDefine Lexeme itext
name ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> NodeF lexeme a
PreprocDefine (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name)
        PreprocDefineConst Lexeme itext
name Node (Lexeme itext)
value ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> a -> NodeF lexeme a
PreprocDefineConst (Lexeme otext
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
value)
        PreprocDefineMacro Lexeme itext
name [Node (Lexeme itext)]
params Node (Lexeme itext)
body ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> [Node (Lexeme otext)]
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> [a] -> a -> NodeF lexeme a
PreprocDefineMacro (Lexeme otext
 -> [Node (Lexeme otext)]
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Node (Lexeme otext)]
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name f ([Node (Lexeme otext)]
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
params f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
body)
        PreprocIf Node (Lexeme itext)
cond [Node (Lexeme itext)]
thenDecls Node (Lexeme itext)
elseBranch ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> [Node (Lexeme otext)]
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> [a] -> a -> NodeF lexeme a
PreprocIf (Node (Lexeme otext)
 -> [Node (Lexeme otext)]
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f ([Node (Lexeme otext)]
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
cond f ([Node (Lexeme otext)]
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
thenDecls f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
elseBranch)
        PreprocIfdef Lexeme itext
name [Node (Lexeme itext)]
thenDecls Node (Lexeme itext)
elseBranch ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> [Node (Lexeme otext)]
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> [a] -> a -> NodeF lexeme a
PreprocIfdef (Lexeme otext
 -> [Node (Lexeme otext)]
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Node (Lexeme otext)]
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name f ([Node (Lexeme otext)]
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
thenDecls f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
elseBranch)
        PreprocIfndef Lexeme itext
name [Node (Lexeme itext)]
thenDecls Node (Lexeme itext)
elseBranch ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> [Node (Lexeme otext)]
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> [a] -> a -> NodeF lexeme a
PreprocIfndef (Lexeme otext
 -> [Node (Lexeme otext)]
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Node (Lexeme otext)]
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name f ([Node (Lexeme otext)]
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
thenDecls f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
elseBranch)
        PreprocElse [Node (Lexeme itext)]
decls ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Node (Lexeme otext)] -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. [a] -> NodeF lexeme a
PreprocElse ([Node (Lexeme otext)]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
decls)
        PreprocElif Node (Lexeme itext)
cond [Node (Lexeme itext)]
decls Node (Lexeme itext)
elseBranch ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> [Node (Lexeme otext)]
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> [a] -> a -> NodeF lexeme a
PreprocElif (Node (Lexeme otext)
 -> [Node (Lexeme otext)]
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f ([Node (Lexeme otext)]
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
cond f ([Node (Lexeme otext)]
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
decls f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
elseBranch)
        PreprocUndef Lexeme itext
name ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> NodeF lexeme a
PreprocUndef (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name)
        PreprocDefined Lexeme itext
name ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> NodeF lexeme a
PreprocDefined (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name)
        PreprocScopedDefine Node (Lexeme itext)
define [Node (Lexeme itext)]
stmts Node (Lexeme itext)
undef ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> [Node (Lexeme otext)]
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> [a] -> a -> NodeF lexeme a
PreprocScopedDefine (Node (Lexeme otext)
 -> [Node (Lexeme otext)]
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f ([Node (Lexeme otext)]
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
define f ([Node (Lexeme otext)]
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
stmts f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
undef)
        MacroBodyStmt Node (Lexeme itext)
stmts ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> NodeF lexeme a
MacroBodyStmt (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
stmts)
        MacroBodyFunCall Node (Lexeme itext)
expr ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> NodeF lexeme a
MacroBodyFunCall (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
expr)
        MacroParam Lexeme itext
name ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> NodeF lexeme a
MacroParam (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name)
        StaticAssert Node (Lexeme itext)
cond Lexeme itext
msg ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> lexeme -> NodeF lexeme a
StaticAssert (Node (Lexeme otext)
 -> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
cond f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
msg)
        LicenseDecl Lexeme itext
license [Node (Lexeme itext)]
copyrights ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> [Node (Lexeme otext)]
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> [a] -> NodeF lexeme a
LicenseDecl (Lexeme otext
 -> [Node (Lexeme otext)]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Node (Lexeme otext)]
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
license f ([Node (Lexeme otext)]
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
copyrights)
        CopyrightDecl Lexeme itext
from Maybe (Lexeme itext)
to [Lexeme itext]
owner ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> Maybe (Lexeme otext)
-> [Lexeme otext]
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a.
lexeme -> Maybe lexeme -> [lexeme] -> NodeF lexeme a
CopyrightDecl (Lexeme otext
 -> Maybe (Lexeme otext)
 -> [Lexeme otext]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (Maybe (Lexeme otext)
      -> [Lexeme otext] -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
from f (Maybe (Lexeme otext)
   -> [Lexeme otext] -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Maybe (Lexeme otext))
-> f ([Lexeme otext] -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Lexeme itext)
-> f (Mapped itext otext (Maybe (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Maybe (Lexeme itext)
to f ([Lexeme otext] -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Lexeme otext]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Lexeme itext] -> f (Mapped itext otext [Lexeme itext])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Lexeme itext]
owner)
        Comment CommentStyle
doc Lexeme itext
start [Lexeme itext]
contents Lexeme itext
end ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (CommentStyle
-> Lexeme otext
-> [Lexeme otext]
-> Lexeme otext
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a.
CommentStyle -> lexeme -> [lexeme] -> lexeme -> NodeF lexeme a
Comment CommentStyle
doc (Lexeme otext
 -> [Lexeme otext]
 -> Lexeme otext
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Lexeme otext]
      -> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
start f ([Lexeme otext]
   -> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Lexeme otext]
-> f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Lexeme itext] -> f (Mapped itext otext [Lexeme itext])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Lexeme itext]
contents f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
end)
        CommentSection Node (Lexeme itext)
start [Node (Lexeme itext)]
decls Node (Lexeme itext)
end ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> [Node (Lexeme otext)]
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> [a] -> a -> NodeF lexeme a
CommentSection (Node (Lexeme otext)
 -> [Node (Lexeme otext)]
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f ([Node (Lexeme otext)]
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
start f ([Node (Lexeme otext)]
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
decls f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
end)
        CommentSectionEnd Lexeme itext
comment ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> NodeF lexeme a
CommentSectionEnd (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
comment)
        Commented Node (Lexeme itext)
comment Node (Lexeme itext)
subject ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> a -> NodeF lexeme a
Commented (Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
comment f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
subject)
        CommentInfo Comment (Lexeme itext)
comment ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Comment (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. Comment lexeme -> NodeF lexeme a
CommentInfo (Comment (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Comment (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Comment (Lexeme itext)
-> f (Mapped itext otext (Comment (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Comment (Lexeme itext)
comment)
        ExternC [Node (Lexeme itext)]
decls ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Node (Lexeme otext)] -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. [a] -> NodeF lexeme a
ExternC ([Node (Lexeme otext)]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
decls)
        Group [Node (Lexeme itext)]
decls ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Node (Lexeme otext)] -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. [a] -> NodeF lexeme a
Group ([Node (Lexeme otext)]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
decls)
        CompoundStmt [Node (Lexeme itext)]
stmts ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Node (Lexeme otext)] -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. [a] -> NodeF lexeme a
CompoundStmt ([Node (Lexeme otext)]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
stmts)
        NodeF (Lexeme itext) (Node (Lexeme itext))
Break ->
            Node (Lexeme otext) -> f (Node (Lexeme otext))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Node (Lexeme otext) -> f (Node (Lexeme otext)))
-> Node (Lexeme otext) -> f (Node (Lexeme otext))
forall a b. (a -> b) -> a -> b
$ NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. NodeF lexeme a
Break
        Goto Lexeme itext
label ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> NodeF lexeme a
Goto (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
label)
        NodeF (Lexeme itext) (Node (Lexeme itext))
Continue ->
            Node (Lexeme otext) -> f (Node (Lexeme otext))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Node (Lexeme otext) -> f (Node (Lexeme otext)))
-> Node (Lexeme otext) -> f (Node (Lexeme otext))
forall a b. (a -> b) -> a -> b
$ NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. NodeF lexeme a
Continue
        Return Maybe (Node (Lexeme itext))
value ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Maybe (Node (Lexeme otext))
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. Maybe a -> NodeF lexeme a
Return (Maybe (Node (Lexeme otext))
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Maybe (Node (Lexeme otext)))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (Node (Lexeme itext))
-> f (Mapped itext otext (Maybe (Node (Lexeme itext))))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Maybe (Node (Lexeme itext))
value)
        SwitchStmt Node (Lexeme itext)
value [Node (Lexeme itext)]
cases ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> [Node (Lexeme otext)]
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> [a] -> NodeF lexeme a
SwitchStmt (Node (Lexeme otext)
 -> [Node (Lexeme otext)]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f ([Node (Lexeme otext)]
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
value f ([Node (Lexeme otext)]
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
cases)
        IfStmt Node (Lexeme itext)
cond Node (Lexeme itext)
thenStmts Maybe (Node (Lexeme itext))
elseStmt ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Node (Lexeme otext)
-> Maybe (Node (Lexeme otext))
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> a -> Maybe a -> NodeF lexeme a
IfStmt (Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> Maybe (Node (Lexeme otext))
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> Maybe (Node (Lexeme otext))
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
cond f (Node (Lexeme otext)
   -> Maybe (Node (Lexeme otext))
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Maybe (Node (Lexeme otext))
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
thenStmts f (Maybe (Node (Lexeme otext))
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Maybe (Node (Lexeme otext)))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Node (Lexeme itext))
-> f (Mapped itext otext (Maybe (Node (Lexeme itext))))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Maybe (Node (Lexeme itext))
elseStmt)
        ForStmt Node (Lexeme itext)
initStmt Node (Lexeme itext)
cond Node (Lexeme itext)
next Node (Lexeme itext)
stmts ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Node (Lexeme otext)
-> Node (Lexeme otext)
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> a -> a -> a -> NodeF lexeme a
ForStmt (Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> Node (Lexeme otext)
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
initStmt f (Node (Lexeme otext)
   -> Node (Lexeme otext)
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
cond f (Node (Lexeme otext)
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
next f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
stmts)
        WhileStmt Node (Lexeme itext)
cond Node (Lexeme itext)
stmts ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> a -> NodeF lexeme a
WhileStmt (Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
cond f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
stmts)
        DoWhileStmt Node (Lexeme itext)
stmts Node (Lexeme itext)
cond ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> a -> NodeF lexeme a
DoWhileStmt (Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
stmts f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
cond)
        Case Node (Lexeme itext)
value Node (Lexeme itext)
stmt ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> a -> NodeF lexeme a
Case (Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
value f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
stmt)
        Default Node (Lexeme itext)
stmt ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> NodeF lexeme a
Default (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
stmt)
        Label Lexeme itext
label Node (Lexeme itext)
stmt ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> a -> NodeF lexeme a
Label (Lexeme otext
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
label f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
stmt)
        ExprStmt Node (Lexeme itext)
expr ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> NodeF lexeme a
ExprStmt (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
expr)
        VLA Node (Lexeme itext)
ty Lexeme itext
name Node (Lexeme itext)
size ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Lexeme otext
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> lexeme -> a -> NodeF lexeme a
VLA (Node (Lexeme otext)
 -> Lexeme otext
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Lexeme otext
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
ty f (Lexeme otext
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
size)
        VarDeclStmt Node (Lexeme itext)
decl Maybe (Node (Lexeme itext))
ini ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Maybe (Node (Lexeme otext))
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> Maybe a -> NodeF lexeme a
VarDeclStmt (Node (Lexeme otext)
 -> Maybe (Node (Lexeme otext))
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Maybe (Node (Lexeme otext))
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
decl f (Maybe (Node (Lexeme otext))
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Maybe (Node (Lexeme otext)))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Node (Lexeme itext))
-> f (Mapped itext otext (Maybe (Node (Lexeme itext))))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Maybe (Node (Lexeme itext))
ini)
        VarDecl Node (Lexeme itext)
ty Lexeme itext
name [Node (Lexeme itext)]
arrs ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Lexeme otext
-> [Node (Lexeme otext)]
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> lexeme -> [a] -> NodeF lexeme a
VarDecl (Node (Lexeme otext)
 -> Lexeme otext
 -> [Node (Lexeme otext)]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Lexeme otext
      -> [Node (Lexeme otext)]
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
ty f (Lexeme otext
   -> [Node (Lexeme otext)]
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Node (Lexeme otext)]
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name f ([Node (Lexeme otext)]
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
arrs)
        DeclSpecArray Maybe (Node (Lexeme itext))
size ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Maybe (Node (Lexeme otext))
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. Maybe a -> NodeF lexeme a
DeclSpecArray (Maybe (Node (Lexeme otext))
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Maybe (Node (Lexeme otext)))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (Node (Lexeme itext))
-> f (Mapped itext otext (Maybe (Node (Lexeme itext))))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Maybe (Node (Lexeme itext))
size)
        InitialiserList [Node (Lexeme itext)]
values ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Node (Lexeme otext)] -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. [a] -> NodeF lexeme a
InitialiserList ([Node (Lexeme otext)]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
values)
        UnaryExpr UnaryOp
op Node (Lexeme itext)
expr ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (UnaryOp
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. UnaryOp -> a -> NodeF lexeme a
UnaryExpr UnaryOp
op (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
expr)
        BinaryExpr Node (Lexeme itext)
lhs BinaryOp
op Node (Lexeme itext)
rhs ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> BinaryOp
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> BinaryOp -> a -> NodeF lexeme a
BinaryExpr (Node (Lexeme otext)
 -> BinaryOp
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (BinaryOp
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
lhs f (BinaryOp
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f BinaryOp
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> BinaryOp -> f BinaryOp
forall (f :: * -> *) a. Applicative f => a -> f a
pure BinaryOp
op f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
rhs)
        TernaryExpr Node (Lexeme itext)
cond Node (Lexeme itext)
thenExpr Node (Lexeme itext)
elseExpr ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Node (Lexeme otext)
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> a -> a -> NodeF lexeme a
TernaryExpr (Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
cond f (Node (Lexeme otext)
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
thenExpr f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
elseExpr)
        AssignExpr Node (Lexeme itext)
lhs AssignOp
op Node (Lexeme itext)
rhs ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> AssignOp
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> AssignOp -> a -> NodeF lexeme a
AssignExpr (Node (Lexeme otext)
 -> AssignOp
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (AssignOp
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
lhs f (AssignOp
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f AssignOp
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> AssignOp -> f AssignOp
forall (f :: * -> *) a. Applicative f => a -> f a
pure AssignOp
op f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
rhs)
        ParenExpr Node (Lexeme itext)
expr ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> NodeF lexeme a
ParenExpr (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
expr)
        CastExpr Node (Lexeme itext)
ty Node (Lexeme itext)
expr ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> a -> NodeF lexeme a
CastExpr (Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
ty f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
expr)
        CompoundExpr Node (Lexeme itext)
ty Node (Lexeme itext)
expr -> -- DEPRECATED
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> a -> NodeF lexeme a
CompoundExpr (Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
ty f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
expr)
        CompoundLiteral Node (Lexeme itext)
ty Node (Lexeme itext)
expr ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> a -> NodeF lexeme a
CompoundLiteral (Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
ty f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
expr)
        SizeofExpr Node (Lexeme itext)
expr ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> NodeF lexeme a
SizeofExpr (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
expr)
        SizeofType Node (Lexeme itext)
ty ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> NodeF lexeme a
SizeofType (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
ty)
        LiteralExpr LiteralType
ty Lexeme itext
value ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (LiteralType
-> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. LiteralType -> lexeme -> NodeF lexeme a
LiteralExpr LiteralType
ty (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
value)
        VarExpr Lexeme itext
name ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> NodeF lexeme a
VarExpr (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name)
        MemberAccess Node (Lexeme itext)
name Lexeme itext
field ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> lexeme -> NodeF lexeme a
MemberAccess (Node (Lexeme otext)
 -> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
name f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
field)
        PointerAccess Node (Lexeme itext)
name Lexeme itext
field ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> lexeme -> NodeF lexeme a
PointerAccess (Node (Lexeme otext)
 -> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
name f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
field)
        ArrayAccess Node (Lexeme itext)
arr Node (Lexeme itext)
idx ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> a -> NodeF lexeme a
ArrayAccess (Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
arr f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
idx)
        FunctionCall Node (Lexeme itext)
callee [Node (Lexeme itext)]
args ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> [Node (Lexeme otext)]
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> [a] -> NodeF lexeme a
FunctionCall (Node (Lexeme otext)
 -> [Node (Lexeme otext)]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f ([Node (Lexeme otext)]
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
callee f ([Node (Lexeme otext)]
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
args)
        CommentExpr Node (Lexeme itext)
comment Node (Lexeme itext)
expr ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> a -> NodeF lexeme a
CommentExpr (Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
comment f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
expr)
        EnumConsts Maybe (Lexeme itext)
name [Node (Lexeme itext)]
members ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Maybe (Lexeme otext)
-> [Node (Lexeme otext)]
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. Maybe lexeme -> [a] -> NodeF lexeme a
EnumConsts (Maybe (Lexeme otext)
 -> [Node (Lexeme otext)]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Maybe (Lexeme otext))
-> f ([Node (Lexeme otext)]
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (Lexeme itext)
-> f (Mapped itext otext (Maybe (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Maybe (Lexeme itext)
name f ([Node (Lexeme otext)]
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
members)
        EnumDecl Lexeme itext
name [Node (Lexeme itext)]
members Lexeme itext
tyName ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> [Node (Lexeme otext)]
-> Lexeme otext
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> [a] -> lexeme -> NodeF lexeme a
EnumDecl (Lexeme otext
 -> [Node (Lexeme otext)]
 -> Lexeme otext
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Node (Lexeme otext)]
      -> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name f ([Node (Lexeme otext)]
   -> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
members f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
tyName)
        Enumerator Lexeme itext
name Maybe (Node (Lexeme itext))
value ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> Maybe (Node (Lexeme otext))
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> Maybe a -> NodeF lexeme a
Enumerator (Lexeme otext
 -> Maybe (Node (Lexeme otext))
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (Maybe (Node (Lexeme otext))
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name f (Maybe (Node (Lexeme otext))
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Maybe (Node (Lexeme otext)))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Node (Lexeme itext))
-> f (Mapped itext otext (Maybe (Node (Lexeme itext))))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Maybe (Node (Lexeme itext))
value)
        AggregateDecl Node (Lexeme itext)
struct ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> NodeF lexeme a
AggregateDecl (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
struct)
        Typedef Node (Lexeme itext)
ty Lexeme itext
name ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> lexeme -> NodeF lexeme a
Typedef (Node (Lexeme otext)
 -> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
ty f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name)
        TypedefFunction Node (Lexeme itext)
ty ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> NodeF lexeme a
TypedefFunction (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
ty)
        Struct Lexeme itext
name [Node (Lexeme itext)]
members ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> [Node (Lexeme otext)]
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> [a] -> NodeF lexeme a
Struct (Lexeme otext
 -> [Node (Lexeme otext)]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Node (Lexeme otext)]
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name f ([Node (Lexeme otext)]
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
members)
        Union Lexeme itext
name [Node (Lexeme itext)]
members ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> [Node (Lexeme otext)]
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> [a] -> NodeF lexeme a
Union (Lexeme otext
 -> [Node (Lexeme otext)]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Node (Lexeme otext)]
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name f ([Node (Lexeme otext)]
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
members)
        MemberDecl Node (Lexeme itext)
decl Maybe (Lexeme itext)
bits ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Maybe (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> Maybe lexeme -> NodeF lexeme a
MemberDecl (Node (Lexeme otext)
 -> Maybe (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Maybe (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
decl f (Maybe (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Maybe (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe (Lexeme itext)
-> f (Mapped itext otext (Maybe (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Maybe (Lexeme itext)
bits)
        TyConst Node (Lexeme itext)
ty ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> NodeF lexeme a
TyConst (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
ty)
        TyPointer Node (Lexeme itext)
ty ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> NodeF lexeme a
TyPointer (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
ty)
        TyStruct Lexeme itext
name ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> NodeF lexeme a
TyStruct (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name)
        TyFunc Lexeme itext
name ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> NodeF lexeme a
TyFunc (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name)
        TyStd Lexeme itext
name ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> NodeF lexeme a
TyStd (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name)
        TyUserDefined Lexeme itext
name ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> NodeF lexeme a
TyUserDefined (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name)
        AttrPrintf Lexeme itext
fmt Lexeme itext
ellipsis Node (Lexeme itext)
fun ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> Lexeme otext
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> lexeme -> a -> NodeF lexeme a
AttrPrintf (Lexeme otext
 -> Lexeme otext
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (Lexeme otext
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
fmt f (Lexeme otext
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
ellipsis f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
fun)
        FunctionDecl Scope
scope Node (Lexeme itext)
proto ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Scope
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. Scope -> a -> NodeF lexeme a
FunctionDecl Scope
scope (Node (Lexeme otext) -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
proto)
        FunctionDefn Scope
scope Node (Lexeme itext)
proto Node (Lexeme itext)
body ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Scope
-> Node (Lexeme otext)
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. Scope -> a -> a -> NodeF lexeme a
FunctionDefn Scope
scope (Node (Lexeme otext)
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
proto f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
body)
        FunctionPrototype Node (Lexeme itext)
ty Lexeme itext
name [Node (Lexeme itext)]
params ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Lexeme otext
-> [Node (Lexeme otext)]
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> lexeme -> [a] -> NodeF lexeme a
FunctionPrototype (Node (Lexeme otext)
 -> Lexeme otext
 -> [Node (Lexeme otext)]
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Lexeme otext
      -> [Node (Lexeme otext)]
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
ty f (Lexeme otext
   -> [Node (Lexeme otext)]
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f ([Node (Lexeme otext)]
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name f ([Node (Lexeme otext)]
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Node (Lexeme otext)]
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Node (Lexeme itext)]
params)
        CallbackDecl Lexeme itext
ty Lexeme itext
name ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Lexeme otext
-> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. lexeme -> lexeme -> NodeF lexeme a
CallbackDecl (Lexeme otext
 -> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
ty f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name)
        NonNull [Lexeme itext]
nonnull [Lexeme itext]
nullable Node (Lexeme itext)
f ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Lexeme otext]
-> [Lexeme otext]
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. [lexeme] -> [lexeme] -> a -> NodeF lexeme a
NonNull ([Lexeme otext]
 -> [Lexeme otext]
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Lexeme otext]
-> f ([Lexeme otext]
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Lexeme itext] -> f (Mapped itext otext [Lexeme itext])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Lexeme itext]
nonnull f ([Lexeme otext]
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f [Lexeme otext]
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Lexeme itext] -> f (Mapped itext otext [Lexeme itext])
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse [Lexeme itext]
nullable f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
f)
        NodeF (Lexeme itext) (Node (Lexeme itext))
Ellipsis ->
            Node (Lexeme otext) -> f (Node (Lexeme otext))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Node (Lexeme otext) -> f (Node (Lexeme otext)))
-> Node (Lexeme otext) -> f (Node (Lexeme otext))
forall a b. (a -> b) -> a -> b
$ NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. NodeF lexeme a
Ellipsis
        ConstDecl Node (Lexeme itext)
ty Lexeme itext
name ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Node (Lexeme otext)
-> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. a -> lexeme -> NodeF lexeme a
ConstDecl (Node (Lexeme otext)
 -> Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
ty f (Lexeme otext -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name)
        ConstDefn Scope
scope Node (Lexeme itext)
ty Lexeme itext
name Node (Lexeme itext)
value ->
            NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext)
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (NodeF (Lexeme otext) (Node (Lexeme otext)) -> Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Scope
-> Node (Lexeme otext)
-> Lexeme otext
-> Node (Lexeme otext)
-> NodeF (Lexeme otext) (Node (Lexeme otext))
forall lexeme a. Scope -> a -> lexeme -> a -> NodeF lexeme a
ConstDefn Scope
scope (Node (Lexeme otext)
 -> Lexeme otext
 -> Node (Lexeme otext)
 -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (Lexeme otext
      -> Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
ty f (Lexeme otext
   -> Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Lexeme otext)
-> f (Node (Lexeme otext)
      -> NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Lexeme itext -> f (Mapped itext otext (Lexeme itext))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Lexeme itext
name f (Node (Lexeme otext)
   -> NodeF (Lexeme otext) (Node (Lexeme otext)))
-> f (Node (Lexeme otext))
-> f (NodeF (Lexeme otext) (Node (Lexeme otext)))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Node (Lexeme itext) -> f (Mapped itext otext (Node (Lexeme itext)))
forall a. MapAst itext otext a => a -> f (Mapped itext otext a)
recurse Node (Lexeme itext)
value)

      where
        recurse :: MapAst itext otext a => a -> f (Mapped itext otext a)
        recurse :: a -> f (Mapped itext otext a)
recurse = AstActions f itext otext
-> FilePath -> a -> f (Mapped itext otext a)
forall itext otext a (f :: * -> *).
(MapAst itext otext a, Applicative f) =>
AstActions f itext otext
-> FilePath -> a -> f (Mapped itext otext a)
mapFileAst AstActions f itext otext
actions FilePath
currentFile

instance MapAst itext otext [Node (Lexeme itext)] where
    type Mapped itext otext [Node (Lexeme itext)]
                          = [Node (Lexeme otext)]
    mapFileAst :: AstActions f itext otext
-> FilePath
-> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
mapFileAst actions :: AstActions f itext otext
actions@AstActions{FilePath -> itext -> f otext
FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
[(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
(FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doText :: FilePath -> itext -> f otext
doLexeme :: FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
doComments :: FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
doText :: forall (f :: * -> *) itext otext.
AstActions f itext otext -> FilePath -> itext -> f otext
doLexeme :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Lexeme itext]
-> f [Lexeme otext]
-> f [Lexeme otext]
doComments :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
..} FilePath
currentFile = FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doNodes FilePath
currentFile ([Node (Lexeme itext)]
 -> f [Node (Lexeme otext)] -> f [Node (Lexeme otext)])
-> ([Node (Lexeme itext)] -> f [Node (Lexeme otext)])
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
        (Node (Lexeme itext) -> f (Node (Lexeme otext)))
-> [Node (Lexeme itext)] -> f [Node (Lexeme otext)]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (AstActions f itext otext
-> FilePath
-> Node (Lexeme itext)
-> f (Mapped itext otext (Node (Lexeme itext)))
forall itext otext a (f :: * -> *).
(MapAst itext otext a, Applicative f) =>
AstActions f itext otext
-> FilePath -> a -> f (Mapped itext otext a)
mapFileAst AstActions f itext otext
actions FilePath
currentFile)

instance MapAst itext otext (FilePath, [Node (Lexeme itext)]) where
    type Mapped itext otext (FilePath, [Node (Lexeme itext)])
                          = (FilePath, [Node (Lexeme otext)])
    mapFileAst :: AstActions f itext otext
-> FilePath
-> (FilePath, [Node (Lexeme itext)])
-> f (Mapped itext otext (FilePath, [Node (Lexeme itext)]))
mapFileAst actions :: AstActions f itext otext
actions@AstActions{FilePath -> itext -> f otext
FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
[(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
(FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doText :: FilePath -> itext -> f otext
doLexeme :: FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
doComments :: FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
doText :: forall (f :: * -> *) itext otext.
AstActions f itext otext -> FilePath -> itext -> f otext
doLexeme :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Lexeme itext]
-> f [Lexeme otext]
-> f [Lexeme otext]
doComments :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
..} FilePath
_ tu :: (FilePath, [Node (Lexeme itext)])
tu@(FilePath
currentFile, [Node (Lexeme itext)]
_) = (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFile ((FilePath, [Node (Lexeme itext)])
 -> f (FilePath, [Node (Lexeme otext)])
 -> f (FilePath, [Node (Lexeme otext)]))
-> ((FilePath, [Node (Lexeme itext)])
    -> f (FilePath, [Node (Lexeme otext)]))
-> (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
        ([Node (Lexeme itext)] -> f [Node (Lexeme otext)])
-> (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (AstActions f itext otext
-> FilePath
-> [Node (Lexeme itext)]
-> f (Mapped itext otext [Node (Lexeme itext)])
forall itext otext a (f :: * -> *).
(MapAst itext otext a, Applicative f) =>
AstActions f itext otext
-> FilePath -> a -> f (Mapped itext otext a)
mapFileAst AstActions f itext otext
actions FilePath
currentFile) ((FilePath, [Node (Lexeme itext)])
 -> f (FilePath, [Node (Lexeme otext)]))
-> (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
forall a b. (a -> b) -> a -> b
$ (FilePath, [Node (Lexeme itext)])
tu

instance MapAst itext otext [(FilePath, [Node (Lexeme itext)])] where
    type Mapped itext otext [(FilePath, [Node (Lexeme itext)])]
                          = [(FilePath, [Node (Lexeme otext)])]
    mapFileAst :: AstActions f itext otext
-> FilePath
-> [(FilePath, [Node (Lexeme itext)])]
-> f (Mapped itext otext [(FilePath, [Node (Lexeme itext)])])
mapFileAst actions :: AstActions f itext otext
actions@AstActions{FilePath -> itext -> f otext
FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
[(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
(FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doText :: FilePath -> itext -> f otext
doLexeme :: FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: FilePath -> [Lexeme itext] -> f [Lexeme otext] -> f [Lexeme otext]
doComments :: FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
doText :: forall (f :: * -> *) itext otext.
AstActions f itext otext -> FilePath -> itext -> f otext
doLexeme :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath -> Lexeme itext -> f (Lexeme otext) -> f (Lexeme otext)
doLexemes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Lexeme itext]
-> f [Lexeme otext]
-> f [Lexeme otext]
doComments :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Comment (Lexeme itext)]
-> f [Comment (Lexeme otext)]
-> f [Comment (Lexeme otext)]
doComment :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Comment (Lexeme itext)
-> f (Comment (Lexeme otext))
-> f (Comment (Lexeme otext))
doNode :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> Node (Lexeme itext)
-> f (Node (Lexeme otext))
-> f (Node (Lexeme otext))
doNodes :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> FilePath
-> [Node (Lexeme itext)]
-> f [Node (Lexeme otext)]
-> f [Node (Lexeme otext)]
doFile :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> (FilePath, [Node (Lexeme itext)])
-> f (FilePath, [Node (Lexeme otext)])
-> f (FilePath, [Node (Lexeme otext)])
doFiles :: forall (f :: * -> *) itext otext.
AstActions f itext otext
-> [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
..} FilePath
currentFile = [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
doFiles ([(FilePath, [Node (Lexeme itext)])]
 -> f [(FilePath, [Node (Lexeme otext)])]
 -> f [(FilePath, [Node (Lexeme otext)])])
-> ([(FilePath, [Node (Lexeme itext)])]
    -> f [(FilePath, [Node (Lexeme otext)])])
-> [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
        ((FilePath, [Node (Lexeme itext)])
 -> f (FilePath, [Node (Lexeme otext)]))
-> [(FilePath, [Node (Lexeme itext)])]
-> f [(FilePath, [Node (Lexeme otext)])]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse (AstActions f itext otext
-> FilePath
-> (FilePath, [Node (Lexeme itext)])
-> f (Mapped itext otext (FilePath, [Node (Lexeme itext)]))
forall itext otext a (f :: * -> *).
(MapAst itext otext a, Applicative f) =>
AstActions f itext otext
-> FilePath -> a -> f (Mapped itext otext a)
mapFileAst AstActions f itext otext
actions FilePath
currentFile)