o[      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None!"&*23468;=BHJKM ADo we need to evaluate the info in order to call these functions? If   returns E, then this function is undefined. Otherwise, it containes an empty C whose type is sufficient to determine all the needed information.&  !"#$%&' & '&%$#"!        ! #"%$'&None!"&(*23468=BHJKM(This class gives the ' associated with a type-level fraction.*o(Kind) This is the kind of type-level fractions. It is not built in to GHC, but instead defined in terms of ,_get the value from a type frac fracVal :: forall n proxy. (KnownFrac n) => proxy n -> Rational()*+,()*+,*+(),()*+,None!"&'(*23468;=BHJKM-SThis class is needed because I can't get type variables to work in "reifyInstances"NX(Kind) Specifies that the type parameter can be known either statically or dynamically.OjThe parameter is determined at run time and the value is inferred automatically without user specificationP2The parameter is determined at run time using the  withParam functionsQ#The parameter is statically set to aR?Use this function for getting the type parameter value from an -. It has proper inlining to ensure that the  gets computed at compile time.ftConstructs all the needed type classes and instances in order to use typeparams in a simple manner. Example usage: ddata NearestNeighbor (k :: Param Nat) (maxdist :: Param Float) elem = ... mkParams ''NearestNeighborGiven a data type of the form data Type v1 v2 ... vk = ...6Then for for paramstr vi, create instances of the form type instance GetParam Param_vi (Type ... vi ... ) = vi type instance SetParam Param_vi vi' (Type ... vi ... ) = Type ... vi' ... This function requires that the Param_# classes have already been defined.Given a data type of the form data Type v1 v2 ... vk = ...2Then for paramstr vi, create instances of the form Ftype instance GetParam (Param_vi p) (Type ... vi ... ) = GetParam p vi type instance SetParam (Param_vi p) vi' (Type ... vi ... )) = SetParam Param_vi (SetParam p vi' vi) t type instance SetParam' (Param_vi p) vi' (Type ... vi ... )) = SetParam Param_vi (SetParam p vi' vi) t Rtype instance Zoom (Param_vi a) = a type instance EyePiece (Param_vi a) = Param_vi type instance Objective (Param_vi p) = Objective_Param_vi (Param_vi p) type family Objective_Param_vi (lens :: * -> Constraint) :: * -> Constraint where Objective_Param_vi (Param_vi Base) = Param_vi Base Objective_Param_vi (Param_vi p) = Objective p #type instance RemoveObjective (Param_vi p) = RemoveObjective_Param_vi (Param_vi p) type family RemoveObjective_Param_vi (lens :: * -> Constraint) :: * -> Constraint where RemoveObjective_Param_vi (Param_vi Base) = Base RemoveObjective_Param_vi (Param_vi p) = Param_vi (RemoveObjective p) This function requires that the Param_# classes have already been defined.gGiven a data type of the form data Type v1 v2 ... vk = ...9Then for each type param vi, create instances of the form type instance GetParam Param_vi (Type ... vi ... ) = vi type instance GetParam (Param_vi p) (Type ... vi ... ) = GetParam p vi type instance SetParam Param_vi vi' (Type ... vi ... )) = Type ... vi' ... type instance SetParam (Param_vi p) vi' (Type ... vi ... )) = SetParam Param_vi (SetParam p vi' vi) t Rtype instance Zoom (Param_vi a) = a type instance EyePiece (Param_vi a) = Param_vi This function requires that the Param_# classes have already been defined.hCreates classes of the form iclass Param_paramname t where getParam_paramname :: t -> paramT {-# INLINE getParam_paramname #-}:NOTE: this function should probably not be called directlyiCreates classes of the form ;class Param_paramname (p :: * -> Constraint) (t :: *) where:NOTE: this function should probably not be called directlyjreturns True if the parameter has kind *, False otherwise isStarParam :: String -> Q Bool isStarParam paramname = do info <- TH.reify $ mkName $ Param__++paramname return $ case info of ClassI (ClassD _ _ xs _ _) _ -> length xs == 2  Creates a TypeLens) for the given star paramname of the form B_paramname :: TypeLens p (Param_paramname p) _paramname = TypeLensk Creates a TypeLens+ for the given config paramname of the form A_paramname :: TypeLens Base Param_paramname _paramname = TypeLensliGiven the class Param_paramname that indexes a star parameter paramname, create an instance of the form instance ( HasDictionary p ) => HasDictionary (Param_paramname p) where type ParamType (Param_paramname p) = ParamType p newtype ParamDict (Param_paramname p) = ParamDict_paramname { unParamDict_paramname :: ParamType (Param_paramname) } typeLens2dictConstructor _ = coerceParamDict $ typeLens2dictConstructor (TypeLens::TypeLens Base p) {#- INLINE typeLens2dictConstructor #-}miGiven the class Param_paramname that indexes a config parameter paramname create an instance of the form instance HasDictionary Param_paramname where type ParamType Param_paramname = paramtype newtype ParamDict Param_len = ParamDict_paramname { getParamDict_paramname :: paramtype } typeLens2dictConstructor _ = ParamDict_paramnamenvGiven star parameter paramname and data type dataname that has parameter paramname, create type instances of the form type instance ApplyConstraint_GetConstraint (Param_paramname p) = ApplyConstraint_GetConstraint p type instance ApplyConstraint_GetType (Param_paramname p) (dataname v1 v2 ... paramname ... vk) = ApplyConstraint_GetType p paramnameovGiven star parameter paramname and data type dataname that has parameter paramname, create type instances of the form type instance ApplyConstraint_GetConstraint Param_paramname = ApplyConstraint_GetConstraint Param_paramname type instance ApplyConstraint_GetType Param_paramname (dataname v1 v2 ... paramname ... vk) = ApplyConstraint_GetType Param_paramname (dataname v1 v2 ... paramname ... vk)psGiven star parameter paramname and data type dataname that has parameter paramname, create an instance of the form instance ( ViewParam p paramname ) => ViewParam (Param_paramname p) (dataname v1 v2 ... paramname ... vk) where viewParam _ _ = viewParam (undefined::TypeLens Base p) (undefined :: paramname)qsGiven star parameter paramname and data type dataname that has parameter paramname, create an instance of the form instance ( Param_paramname (dataname v1 v2 ... paramname ... vk) ) => ViewParam Param_paramname (dataname v1 v2 ... paramname ... vk) where viewParam _ _ = getParam_paramname (undefined::dataname v1 v2 ... paramname ... vk)rcreates instances of the form instance (KnownNat paramName) => Param_paramName (Static paramName) where param_paramName m = fromIntegral $ natVal (Proxy::Proxy paramName)s helper for mkReifiableConstraints'creates instances of the form rinstance ReifiableConstraint Def_Param_paramName where data Def (Def_Param_paramName) a = Param_paramName {} d-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrsINQPOf[\_be^adZ]`cBCDE@A4./0123?FG<;:765YVWX98=>UTRSihjklmpqno-rsgHIJKLMS-./0123456789:;<=>?@ABCDEFGHIJKLMNQPORSTUVWXYZ[\]^_`abcdefghijklmnopqrsNone!"&*23468=BHJKMtuvwxyz{|}~tuvwxyz{|}~tuv|{zyxw}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~}~tuvwxyz{|}~None!"&*23468=BHJKM None!"&*23468=BHJKM     I       None!"&'(*23468;=BHJKM/ !"#$%&'()*+,-./0123456789:; I# !#"$%&(')*+-,./0123456789:;<       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPPQRSTTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~        !"#$%&'()*+,-./0123456789:;<=>?@ABCDtypeparams-0.0.4 Data.ParamsData.Params.PseudoPrimData.Params.FracData.Params.FunctorData.Params.ApplicativeData.Params.VectorData.Params.Vector.Unboxedghc-prim GHC.TypesFloatF# PseudoPrimPseudoPrimInfo pp_sizeOf# pp_alignment#pp_indexByteArray#pp_readByteArray#pp_writeByteArray#seqInfo emptyInfoPseudoPrimInfo_Word64PseudoPrimInfo_Word32PseudoPrimInfo_Word16PseudoPrimInfo_Word8PseudoPrimInfo_CharPseudoPrimInfo_IntPseudoPrimInfo_FloatPseudoPrimInfo_Double pp_sizeOf pp_alignmentpp_readByteArraypp_writeByteArraypp_indexByteArrayTFCo:R:PseudoPrimInfoWord64$fPseudoPrimWord64TFCo:R:PseudoPrimInfoWord32$fPseudoPrimWord32TFCo:R:PseudoPrimInfoWord16$fPseudoPrimWord16TFCo:R:PseudoPrimInfoWord8$fPseudoPrimWord8TFCo:R:PseudoPrimInfoChar$fPseudoPrimCharTFCo:R:PseudoPrimInfoInt$fPseudoPrimIntTFCo:R:PseudoPrimInfoFloat$fPseudoPrimFloatTFCo:R:PseudoPrimInfoDouble$fPseudoPrimDouble KnownFracfracSingFrac/fracVal Param_DummyRunTimeToAutomaticrunTimeToAutomaticmkPseudoPrimInfoFromRuntimeStaticToAutomaticstaticToAutomaticmkPseudoPrimInfoFromStatic ParamIndexBaseRemoveObjective ObjectiveEyePieceZoom SetParam'SetParamGetParamApplyConstraint_GetTypeApplyConstraint_GetConstraintApplyConstraint ViewParam viewParam HasDictionary ParamType ParamDicttypeLens2dictConstructorTypeLensReifiableConstraintDef reifiedInsConstraintLiftlowerConfig AutomaticRunTimeStaticintparam floatparam mkRuleFraccoerceParamDictzoom objectiveremoveObjective_base mkWith1Param with1Paramwith1ParamAutomaticmkApWith1Param apWith1Param' apWith1ParammkApWith2Param apWith2Param' apWith2ParammkApWith3Param apWith3Param' apWith3ParammkParamsmkGettersSettersmkParamClass_ConfigmkParamClass_StarmkTypeLens_StarmkTypeLens_ConfigmkHasDictionary_StarmkHasDictionary_ConfigmkApplyConstraint_StarmkApplyConstraint_ConfigmkViewParam_StarmkViewParam_ConfigmkParamInstancemkReifiableConstraintFunctorfmap'fmapRemoveObjective_Param_bObjective_Param_bParam_bRemoveObjective_Param_aObjective_Param_aParam_aParamDict_Param_bunParamDict_Param_bParamDict_Param_aunParamDict_Param_a_a_b$fFunctorBaset$fFunctorParam_aEither$fFunctorParam_bEitherTFCo:R:RemoveObjectiveParam_b$fFunctorParam_aMaybe!TFCo:R:SetParam'Param_anewparamt0 Applicativepureap<$>@@at<*><*>-<**><*--<*--<**>--*>--*>$fApplicativeParam_bEither$fApplicativeParam_aEither$fApplicativeParam_aMaybe$fApplicativeBaset Param_len getParam_len Param_elem_len_elemVectorTruebaseGHC.RealRational GHC.TypeLitsNatSFrac $fKnownFrac/Int fromIntegralmkTypeFamilies_CommonmkTypeFamilies_StarmkReifiableConstraint' DummyNewtype asProxyOfusingusing'apUsingapUsing'apUsing2apUsing3apUsing4apUsing5 mkParams' kind2typekind2constraintkind2val kind2convert param2class param2func tyVarBndr2strapplyTyVarBndrLparamClass_getParamTFCo:R:SetParam'BasectTFCo:R:SetParam(->)*BasectTFCo:R:GetParam*(->)BasetTFCo:R:ObjectiveBase$fCategory(->)TypeLensKnownNat KnownSymbolSymbol+*^<=?- CmpSymbolCmpNat sameSymbolsameNat someSymbolVal someNatVal symbolValnatValSomeNat SomeSymbol<= Data.Proxy asProxyTypeOfProxyKProxyconstraints-0.4Data.Constraint.UnsafeunsafeAlternativeunsafeApplicativeunsafeUnderive unsafeDeriveunsafeCoerceConstraintData.Constraintbottomtoprefltrans&&&contractweaken2weaken1***\\DictSub:-clsClassins:=>reflection-1.5.1Data.ReflectionnatintgivereifyreflectReifiesgivenGivenZDSDPD Def_Param_len getParam_len_TFCo:R:DefParam_lenaParamDict_Param_elemunParamDict_Param_elemTFCo:R:ParamTypeParam_elemParamDict_Param_lenunParamDict_Param_lenTFCo:R:ParamTypeParam_lenMVectorRemoveObjective_Param_elemObjective_Param_elemMVector_AutomaticMVector_RunTimePseudoPrimInfo_VectorAutomaticVector_AutomaticPseudoPrimInfo_VectorRunTimeVector_RunTimePseudoPrimInfo_VectorStaticunInt$fMVectorMVectorelemTFCo:R:MVectorAutomaticselem$fMVectorMVectorelem0TFCo:R:MVectorRunTimeselem$fMVectorMVectorelem1TFCo:R:MVectorStaticselemTFCo:R:MutableVectorTFCo:R:PseudoPrimInfoVector$fPseudoPrimVector$fVectorVectorelem$fNFDataVectorTFCo:R:VectorAutomaticelemTFCo:R:PseudoPrimInfoVector0$fPseudoPrimVector0$fVectorVectorelem0$fNFDataVector0TFCo:R:VectorRunTimeelemTFCo:R:PseudoPrimInfoVector1$fPseudoPrimVector1 $fPrimVector$fVectorVectorelem1$fNFDataVector1*$fRunTimeToAutomaticParam_elemVectorVector+$fRunTimeToAutomaticParam_elemVectorVector0+$fRunTimeToAutomaticParam_elemVectorVector1)$fRunTimeToAutomaticParam_lenVectorVector)$fStaticToAutomaticParam_elemVectorVector($fStaticToAutomaticParam_lenVectorVectorTFCo:R:VectorStaticelem $fOrdVector $fEqVector $fShowVector TFCo:R:RemoveObjectiveParam_elem