Question, re: type class syntax.

Hi all, I can’t figure out why this is invalid: class (Show a, Num a) => LogTree2 a where evaluator :: (LogTree2 a) t => t -> SizedVector a -> SizedVector a error| ‘LogTree2’ is applied to too many type arguments In the type ‘(LogTree2 a) t => t -> SizedVector a -> SizedVector a’ In the class declaration for ‘LogTree2’ Can anyone help me understand? Thanks, -db

If you want the "LogTree2" typeclass to have multiple type arguments (which
it looks like you do, from the definition of "evaluator"), you need to
define it as
class (Show a, Num a) => LogTree2 a t where
--Will
On Sat, Aug 29, 2015 at 6:45 PM, David Banas
Hi all,
I can’t figure out why this is invalid:
class (Show a, Num a) => LogTree2 a where evaluator :: (LogTree2 a) t => t -> SizedVector a -> SizedVector a
error| ‘LogTree2’ is applied to too many type arguments In the type ‘(LogTree2 a) t => t -> SizedVector a -> SizedVector a’ In the class declaration for ‘LogTree2’
Can anyone help me understand?
Thanks, -db
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe

Thanks, Will.
Maybe I’ve got the syntax all wrong, but my intent is just to constrain the type ’t’ to be of class 'LogTree2 a’.
-db
On Aug 29, 2015, at 5:27 PM, William Yager
If you want the "LogTree2" typeclass to have multiple type arguments (which it looks like you do, from the definition of "evaluator"), you need to define it as
class (Show a, Num a) => LogTree2 a t where
--Will
On Sat, Aug 29, 2015 at 6:45 PM, David Banas
wrote: Hi all, I can’t figure out why this is invalid:
class (Show a, Num a) => LogTree2 a where evaluator :: (LogTree2 a) t => t -> SizedVector a -> SizedVector a
error| ‘LogTree2’ is applied to too many type arguments In the type ‘(LogTree2 a) t => t -> SizedVector a -> SizedVector a’ In the class declaration for ‘LogTree2’
Can anyone help me understand?
Thanks, -db
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe

On Sat, Aug 29, 2015 at 8:30 PM, David Banas
Maybe I’ve got the syntax all wrong, but my intent is just to constrain the type ’t’ to be of class 'LogTree2 a’
That doesn't seem to make a lot of sense; "LogTree2 a" means that the type a is of class LogTree2. "LogTree2 a" is not something that a type can be an instance of. -- brandon s allbery kf8nh sine nomine associates allbery.b@gmail.com ballbery@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net

Hey David,
I think there might be a bit of confusion here. When you say "LogTree2 a",
that means "a" is an instance of "LogTree2". Maybe you want something like
this?
evaluator :: LogTree2 a => a -> SizedVector a -> SizedVector a
Some context might help us to understand what you're going for.
--Will
On Sat, Aug 29, 2015 at 7:30 PM, David Banas
Thanks, Will. Maybe I’ve got the syntax all wrong, but my intent is just to constrain the type ’t’ to be of class 'LogTree2 a’. -db
On Aug 29, 2015, at 5:27 PM, William Yager
wrote: If you want the "LogTree2" typeclass to have multiple type arguments (which it looks like you do, from the definition of "evaluator"), you need to define it as
class (Show a, Num a) => LogTree2 a t where
--Will
On Sat, Aug 29, 2015 at 6:45 PM, David Banas
wrote: Hi all,
I can’t figure out why this is invalid:
class (Show a, Num a) => LogTree2 a where evaluator :: (LogTree2 a) t => t -> SizedVector a -> SizedVector a
error| ‘LogTree2’ is applied to too many type arguments In the type ‘(LogTree2 a) t => t -> SizedVector a -> SizedVector a’ In the class declaration for ‘LogTree2’
Can anyone help me understand?
Thanks, -db
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe

Thank you, both, for responding.
What I was trying to express was that the particular type of LogTree2, t, would determine the type of SizedVector, a, apropos to the ‘evaluator’ function, for a particular instance. It looks like functional dependencies is the right way to achieve this, because this type checks:
class LogTree2 t a | t -> a where
evaluator :: LogTree2 t a => t -> SizedVector a -> SizedVector a
-db
On Aug 29, 2015, at 5:39 PM, William Yager
Hey David,
I think there might be a bit of confusion here. When you say "LogTree2 a", that means "a" is an instance of "LogTree2". Maybe you want something like this?
evaluator :: LogTree2 a => a -> SizedVector a -> SizedVector a
Some context might help us to understand what you're going for.
--Will
On Sat, Aug 29, 2015 at 7:30 PM, David Banas
wrote: Thanks, Will. Maybe I’ve got the syntax all wrong, but my intent is just to constrain the type ’t’ to be of class 'LogTree2 a’. -db On Aug 29, 2015, at 5:27 PM, William Yager
wrote: If you want the "LogTree2" typeclass to have multiple type arguments (which it looks like you do, from the definition of "evaluator"), you need to define it as
class (Show a, Num a) => LogTree2 a t where
--Will
On Sat, Aug 29, 2015 at 6:45 PM, David Banas
wrote: Hi all, I can’t figure out why this is invalid:
class (Show a, Num a) => LogTree2 a where evaluator :: (LogTree2 a) t => t -> SizedVector a -> SizedVector a
error| ‘LogTree2’ is applied to too many type arguments In the type ‘(LogTree2 a) t => t -> SizedVector a -> SizedVector a’ In the class declaration for ‘LogTree2’
Can anyone help me understand?
Thanks, -db
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
participants (3)
-
Brandon Allbery
-
David Banas
-
William Yager