19 | ------------------------------------------------------------
20 | --- Simplest `Gen` signature, user for internal requests ---
21 | ------------------------------------------------------------
32 | export
36 | export
42 | sig.givenParams.asList <&> \idx => maybe (show idx) (\n => "\{show idx}(\{show n})") $ uName $ index' sig.targetType.args idx
46 | sig.generatedParams = fromList (allFins sig.targetType.args.length) `difference` sig.givenParams
48 | export
49 | LogPosition GenSignature where logPosition sig = "\{show $ extractTargetTyExpr sig.targetType}[\{showGivens sig}]"
57 | ||| Set of type arguments for which there exists a given argument depending on it
58 | -- This is very similar to `dependees` function from libs, but is takes into account the difference between given and non-given arguments.
59 | -- Maybe, that function should be generalised and this one to be reimplemented through the generalised one.
60 | export
64 | let varsInGivens = concatMap (\idx => allVarNames' $ type $ index' sig.targetType.args idx) sig.givenParams
70 | export
72 | canonicSig sig = piAll returnTy $ MkArg MW ExplicitArg Nothing `(Data.Fuel.Fuel) :: (arg <$> Prelude.toList sig.givenParams) where
73 | -- TODO Check that the resulting `TTImp` reifies to a `Type`? During this check, however, all types must be present in the caller's context.
76 | arg idx = let MkArg {name, type, _} = index' sig.targetType.args idx in MkArg MW ExplicitArg name type
79 | returnTy = `(Test.DepTyCheck.Gen.Gen Test.DepTyCheck.Gen.Emptiness.MaybeEmpty ~(buildDPair targetTypeApplied generatedArgs)) where
82 | targetTypeApplied = foldr apply (extractTargetTyExpr sig.targetType) $ reverse $ sig.targetType.args <&> \(MkArg {name, piInfo, _}) => do
94 | -- Complementary to `canonicSig`
95 | export
96 | callCanonic : (0 sig : GenSignature) -> (topmost : Name) -> (fuel : TTImp) -> Vect sig.givenParams.size TTImp -> TTImp
99 | -----------------------------------------------------
100 | --- Data types for the safe signature formulation ---
101 | -----------------------------------------------------
119 | ------------------------------------------------------------------
120 | --- Datatypes to describe signatures after checking user input ---
121 | ------------------------------------------------------------------
123 | --- `Gen` signature containing info about params explicitness and their names ---
137 | -- characterises external generator signatures ignoring particular order of given/generated arguments
138 | export
142 | -- Compares external generator signatures ignoring particular order of given/generated arguments
146 | -- Compares external generator signatures ignoring particular order of given/generated arguments
150 | export
151 | callExternalGen : (sig : ExternalGenSignature) -> (topmost : Name) -> (fuel : TTImp) -> Vect sig.givenParams.size TTImp -> TTImp
153 | foldl (flip apply) (appFuel topmost fuel) $ reorder sig.givensOrder (sig.givenParams.asVect `zip` values) <&> \case
157 | export
158 | internalise : (extSig : ExternalGenSignature) -> Subset GenSignature $ \sig => sig.givenParams.size = extSig.givenParams.size
159 | internalise $ MkExternalGenSignature ty giv _ _ = Element (MkGenSignature ty $ keySet giv) $ keySetSize giv