1. You could use MonoFunctor (complicated and probably not a good idea here) or just put the Taskable constraint on functions instead of on the Task definition (good and easy).So it would bedata Task a = Task a deriving FunctorAnd then put "Taskable a" on functions that require it.2. You can't do it because it doesn't really make sense. A big part of a functor is that it has to be totally agnostic of what it's parametrized over. Otherwise you could easily violate the functor laws.Good question though, I used to wonder the same thing.cheers,WillHello All,to create an wrapper for these Taskables and create a functor for it as follows
I am working on a program that will define a bunch of tasks. Each task
will have to implement certain methods as part of a type class.
-- task 1
data UpdateAcctsTask = UpdateAccts
-- task 2
data EmailConfig = EmaiConfig {someattrs::String}
data SendEmailTask = SendEmailsTask EmailConfig
-- task 3
data GeneralWriterTask a = GeneralWriterTask a
Each of these tasks implement a class, Taskable. The return
values are simplified for this example.
class Taskable a where
process :: a -> Bool
can_run :: a -> Bool
This works fine. I can expand on these tasks and execute them.
Now, I wanted to be able to defined dependencies between these (Taskable's). I decided
I could create a data type for this dependency and may be also get a FreeMonad
around this structure for further processing using a graph of Tasks. But, before that I wantedAppreciate any help on this. Thank you!
The first thing I did was, define a Task, which generalizes over all
the above defined (and future Taskables)
data Task a where
Task :: (Taskable a) => a -> Task a
instance Functor Task where
fmap:: (Taskable a, Taskable b) -> (a -> b) -> Task a -> Task b --- THIS DOES NOT WORK
fmap f (Task a) = Task $ f a
But, I realized that I cannot define an fmap over a type constraint.
My questions are:
1. Is there any way to do this. I see there is an answer of SO. I wanted
to make sure if there were any improvements to this since that answer'
was posted.
http://stackoverflow.com/questions/17157579/functor- instance-for-a-gadt-with-type- constraint
2. Secondly, I would like to know why this is not possible. Is it a current
limitation of GHC or if there is some fundamental category theory concepts
that dis-allows such declarations that I need to grok!_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell- cafe
Only members subscribed via the mailman list are allowed to post.