[Haskell-beginners] typeclass woes...how to constain a typeclass to be "closed" under an operation....

David McBride toad3k at gmail.com
Tue Jan 6 16:41:09 UTC 2015


I think you've slightly surpassed the skill level of this list.  You might
try on haskell-cafe, and I would bet you could get an in depth answer on
stackoverflow.

On Tue, Jan 6, 2015 at 3:46 AM, Nicholls, Mark <nicholls.mark at vimn.com>
wrote:

>  I dont seem to have any replies
> Booo
> Is my question too stupid? Or boring? Or unintelligable?
>
>  Its quite common in maths to have operations in a theory that are (set)
> closed, i just want to translate that notion to a typeclass
>
>  I have a suggestion that does work
>
>  Class Foo m where
>    op :: m a -> m (S a)
>
>  That is closed, but now were working on types of kind • -> •, which is
> another leap of complexity
>
>  Is this the idiom/pattern i should follow? Or can the closure contraint
> be expressed directly?
>
>
>
> Excuse the spelling, sent from a phone with itty bitty keys, it like
> trying to sow a button on a shirt with a sausage.
>
>
> On 5 Jan 2015, at 10:54, Nicholls, Mark <nicholls.mark at vimn.com> wrote:
>
>   > {-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleContexts,
> FlexibleInstances, GADTs #-}
>
>
>
> lets say I have a data type
>
>
>
> > data S a = S a deriving Show
>
>
>
> and a nice simple typeclass
>
>
>
> > class Foo a where
>
> >   inc :: a -> S a
>
>
>
> make Integer an instance and....
>
>
>
> > instance Foo Integer where
>
> >   inc x = S x
>
>
>
> brilliant...
>
>
>
> now lets say I want my typeclass to enforce that any result of inc is also
> of a type that is an instance of the typeclass
>
> I'll follow my nose...which causes me a problem that makes me realise I
> maybe I don't understand whats going on.
>
>
>
> > class Bar a where
>
> >   inc' :: (Bar (S a)) => a -> S a
>
>
>
> follow it to....
>
>
>
> > instance Bar Integer where
>
> >   inc' x = S x
>
>
>
> this WORKS!...even though "S Integer" is not an instance of Bar!...maybe I
> don't understand.
>
>
>
> > -- x = inc' (1 :: Integer)
>
>
>
> This would go BOOM ....”no instance of (Bar (S Integer))"
>
> ...so that makes sense....
>
>
>
> How do I force Haskell to check the constraint before I evaluate an
> expression?
>
>
>
> follow my nose?
>
>
>
> > -- class (Baz (S a)) => Baz a where
>
> > --  inc'' :: a -> S a
>
>
>
> BOOM ...."Cycle in class declaration"....
>
> booo..but I suppose thats understandable....
>
>
>
> so
>
>
>
> a) is my use of typeclasses correct?...or am I missing something?
>
> b) if so, how do I force the compiler to make sure my typeclass operations
> is nicely closed (under the typeclass)?
>
>
>
>
>
>
>
> CONFIDENTIALITY NOTICE
>
> This e-mail (and any attached files) is confidential and protected by
> copyright (and other intellectual property rights). If you are not the
> intended recipient please e-mail the sender and then delete the email and
> any attached files immediately. Any further use or dissemination is
> prohibited.
>
> While MTV Networks Europe has taken steps to ensure that this email and
> any attachments are virus free, it is your responsibility to ensure that
> this message and any attachments are virus free and do not affect your
> systems / data.
>
> Communicating by email is not 100% secure and carries risks such as delay,
> data corruption, non-delivery, wrongful interception and unauthorised
> amendment. If you communicate with us by e-mail, you acknowledge and assume
> these risks, and you agree to take appropriate measures to minimise these
> risks when e-mailing us.
>
> MTV Networks International, MTV Networks UK & Ireland, Greenhouse,
> Nickelodeon Viacom Consumer Products, VBSi, Viacom Brand Solutions
> International, Be Viacom, Viacom International Media Networks and VIMN and
> Comedy Central are all trading names of MTV Networks Europe.  MTV Networks
> Europe is a partnership between MTV Networks Europe Inc. and Viacom
> Networks Europe Inc.  Address for service in Great Britain is 17-29 Hawley
> Crescent, London, NW1 8TT.
>
>  _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
>
>
> CONFIDENTIALITY NOTICE
>
> This e-mail (and any attached files) is confidential and protected by
> copyright (and other intellectual property rights). If you are not the
> intended recipient please e-mail the sender and then delete the email and
> any attached files immediately. Any further use or dissemination is
> prohibited.
>
> While MTV Networks Europe has taken steps to ensure that this email and
> any attachments are virus free, it is your responsibility to ensure that
> this message and any attachments are virus free and do not affect your
> systems / data.
>
> Communicating by email is not 100% secure and carries risks such as delay,
> data corruption, non-delivery, wrongful interception and unauthorised
> amendment. If you communicate with us by e-mail, you acknowledge and assume
> these risks, and you agree to take appropriate measures to minimise these
> risks when e-mailing us.
>
> MTV Networks International, MTV Networks UK & Ireland, Greenhouse,
> Nickelodeon Viacom Consumer Products, VBSi, Viacom Brand Solutions
> International, Be Viacom, Viacom International Media Networks and VIMN and
> Comedy Central are all trading names of MTV Networks Europe.  MTV Networks
> Europe is a partnership between MTV Networks Europe Inc. and Viacom
> Networks Europe Inc.  Address for service in Great Britain is 17-29 Hawley
> Crescent, London, NW1 8TT.
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20150106/a8e05a47/attachment.html>


More information about the Beginners mailing list