0 | module Collie.Options.Domain
8 | data Domain : Type where
9 | Some : (d : Type ) -> Domain
10 | ALot : (ds : RawMagma) -> Domain
13 | elimDomain : {p : Domain -> Type} ->
14 | (dSome : (d : Type ) -> p (Some d )) ->
15 | (dALot : (ds : RawMagma) -> p (ALot ds)) ->
17 | elimDomain dSome dALot (Some d ) = dSome d
18 | elimDomain dSome dALot (ALot ds) = dALot ds
21 | Carrier : Domain -> Type
22 | Carrier = elimDomain id (\ds => ds.Carrier)
25 | Parser : Domain -> Type
26 | Parser d = String -> Either String $
Carrier d
29 | record Arguments where
30 | constructor MkArguments
33 | rawParser : Parser domain
36 | (.parser) : (arg : Arguments) -> String -> Error (Carrier arg.domain)
37 | arg .parser x = fromEither $
mapFst CouldNotParse (arg.rawParser x)
40 | ParsedArgumentsT : (f : Type -> Type) -> Arguments -> Type
41 | ParsedArgumentsT f ducer = f $
Carrier ducer.domain
44 | ParsedArguments : Arguments -> Type
45 | ParsedArguments ducer
47 | (if ducer.required then id else Maybe)