KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
For an uncertainty-propagating Approximate type , I'd like to have instances for Functor through Monad . This however doesn't work because I need a vector space structure on the contained types, so it must actually be restricted versions of the classes. As there still doesn't seem to be a standard library for those (or is there? please point me. There's rmonad , but it uses * rather than Constraint as the context kind, which seems just outdated to me), I wrote my own version for the time being. It all works easy for Functor class CFunctor f where type CFunctorCtxt f a :: Constraint cfmap :: (CFunctorCtxt f a, CFunctorCtxt f b) => (a -> b) -> f a -> f b instance CFunctor Approximate where type CFunctorCtxt Approximate a = FScalarBasisSpace a f `cfmap` Approximate v us = Approximate v' us' where v' = f v us' = ... but a direct translation of Applicative , like class CFunctor f => CApplicative' f where type CApplicative'Ctxt f a :: Constraint cpure' :: (CApplicative'Ctxt f a) => a -> f a (#<*>#) :: ( CApplicative'Ctxt f a , CApplicative'Ctxt f (a->b) , CApplicative'Ctxt f b) => f(a->b) -> f a -> f b is not possible because functions a->b do not have the necessary vector space structure* FScalarBasisSpace . What does work, however, is to change the definition of the restricted applicative class: class CFunctor f => CApplicative f where type CApplicati
Tags (comma-separated)
Save Edits
Cancel