0 | module Text.WebIDL.Types.Argument
2 | import Data.Bitraversable
3 | import Data.Traversable
4 | import Derive.Prelude
5 | import Text.WebIDL.Types.Attribute
6 | import Text.WebIDL.Types.Identifier
7 | import Text.WebIDL.Types.Numbers
8 | import Text.WebIDL.Types.StringLit
9 | import Text.WebIDL.Types.Type
11 | %language ElabReflection
22 | data ConstValue = B Bool | F FloatLit | I IntLit
24 | %runElab derive "ConstValue" [Eq,Show,HasAttributes]
45 | %runElab derive "Default" [Eq,Show,HasAttributes]
51 | record ArgumentName where
52 | constructor MkArgName
55 | %runElab derive "ArgumentName" [Eq,Show,HasAttributes]
58 | record ArgF (a : Type) (b : Type) where
64 | %runElab derive "ArgF" [Eq,Show]
68 | Arg = ArgF ExtAttributeList Identifier
71 | record OptArgF (a : Type) (b : Type) where
72 | constructor MkOptArg
79 | %runElab derive "OptArgF" [Eq,Show]
83 | OptArg = OptArgF ExtAttributeList Identifier
103 | data ArgumentListF : (a : Type) -> (b : Type) -> Type where
104 | VarArg : (args : List $
ArgF a b)
105 | -> (vararg : ArgF a b)
106 | -> ArgumentListF a b
108 | NoVarArg : (args : List $
ArgF a b)
109 | -> (optArgs : List $
OptArgF a b)
110 | -> ArgumentListF a b
112 | %runElab derive "ArgumentListF" [Eq,Show]
115 | ArgumentList : Type
116 | ArgumentList = ArgumentListF ExtAttributeList Identifier
124 | Bifunctor ArgF where bimap = assert_total bimapDefault
127 | Bifoldable ArgF where bifoldr = bifoldrDefault
130 | Bitraversable ArgF where
131 | bitraverse f g (MkArg a t n) =
132 | [| MkArg (f a) (bitraverse f g t) (pure n) |]
135 | Functor (ArgF a) where map = bimap id
138 | Foldable (ArgF a) where foldr = bifoldr (const id)
141 | Traversable (ArgF a) where traverse = bitraverse pure
145 | Bifunctor OptArgF where bimap = assert_total bimapDefault
148 | Bifoldable OptArgF where bifoldr = bifoldrDefault
151 | Bitraversable OptArgF where
152 | bitraverse f g (MkOptArg a1 a2 t n d) =
153 | [| MkOptArg (f a1) (f a2) (bitraverse f g t) (pure n) (pure d) |]
156 | Functor (OptArgF a) where map = bimap id
159 | Foldable (OptArgF a) where foldr = bifoldr (const id)
162 | Traversable (OptArgF a) where traverse = bitraverse pure
166 | Bifunctor ArgumentListF where bimap = assert_total bimapDefault
169 | Bifoldable ArgumentListF where bifoldr = bifoldrDefault
172 | Bitraversable ArgumentListF where
173 | bitraverse f g (VarArg as a) =
174 | [| VarArg (traverse (bitraverse f g) as) (bitraverse f g a) |]
175 | bitraverse f g (NoVarArg as os) =
177 | (traverse (bitraverse f g) as)
178 | (traverse (bitraverse f g) os)
182 | Functor (ArgumentListF a) where map = bimap id
185 | Foldable (ArgumentListF a) where foldr = bifoldr (const id)
188 | Traversable (ArgumentListF a) where traverse = bitraverse pure
191 | HasAttributes a => HasAttributes (ArgumentListF a b) where
192 | attributes = bifoldMap attributes (const Nil)