Re: instance Functor Set, was: Re: Export lists in modules

2006-03-01 Thread Johannes Waldmann
Jim Apple wrote:

 class MyMap f a b where
 myMap :: (a - b) - f a - f b
 instance (Functor f) = MyMap f a b where
 myMap = fmap
 instance (Ord a, Ord b) = MyMap Data.Set.Set a b where
 myMap = Data.Set.map

OK (I guess).

But my point was that I want to use
do notation for Sets (in fact, for any kind of collection)
so I'd need the original Functor and Monad.

I couldn't use ghc's Rebindable Syntax feature
because the types for (=) would not match?
http://www.haskell.org/ghc/docs/6.4/html/users_guide/syntax-extns.html#rebindable-syntax

Best regards,
-- 
-- Johannes Waldmann -- Tel/Fax (0341) 3076 6479/80 --
 http://www.imn.htwk-leipzig.de/~waldmann/ ---

___
Haskell-prime mailing list
Haskell-prime@haskell.org
http://haskell.org/mailman/listinfo/haskell-prime


Re: instance Functor Set, was: Re: Export lists in modules

2006-03-01 Thread Jim Apple
On 3/1/06, Johannes Waldmann [EMAIL PROTECTED] wrote:
 But my point was that I want to use
 do notation for Sets (in fact, for any kind of collection)
 so I'd need the original Functor and Monad.

I understand this for Monad. Why not just redefine Functor, Oleg-style?

 I couldn't use ghc's Rebindable Syntax feature
 because the types for (=) would not match?
 http://www.haskell.org/ghc/docs/6.4/html/users_guide/syntax-extns.html#rebindable-syntax

Good news, everyone!

http://www.haskell.org/ghc/dist/current/docs/users_guide/syntax-extns.html#rebindable-syntax

That looks good to me!

Jim
___
Haskell-prime mailing list
Haskell-prime@haskell.org
http://haskell.org/mailman/listinfo/haskell-prime


instance Functor Set, was: Re: Export lists in modules

2006-02-28 Thread Johannes Waldmann
Malcolm Wallace wrote:

 But if contexts-on-datatypes worked correctly,
 
 data Set a = Ord a = 
 
 then even the real map from Data.Set:
 
 map :: (Ord a, Ord b) = (a - b) - Set a - Set b
 
 could be an instance method of Functor. 

I'd love that. But I don't quite understand:
do you think this is/should be possible with:
current Haskell? Haskell-Prime? Current ghc (what extensions)?
-- 
-- Johannes Waldmann -- Tel/Fax (0341) 3076 6479/80 --
 http://www.imn.htwk-leipzig.de/~waldmann/ ---

___
Haskell-prime mailing list
Haskell-prime@haskell.org
http://haskell.org/mailman/listinfo/haskell-prime


Re: instance Functor Set, was: Re: Export lists in modules

2006-02-28 Thread Malcolm Wallace
  But if contexts-on-datatypes worked correctly,
  
  data Set a = Ord a = 
  
  then even the real map from Data.Set:
  
  map :: (Ord a, Ord b) = (a - b) - Set a - Set b
  
  could be an instance method of Functor. 
 
 I'd love that. But I don't quite understand:
 do you think this is/should be possible with:
 current Haskell? Haskell-Prime? Current ghc (what extensions)?

It is not possible currently, because of the H'98 language definition.
I do think it would be nice to fix this in Haskell-prime.  However,
although the idea is somewhat related to Polymorphic Components
  http://hackage.haskell.org/trac/haskell-prime/wiki/PolymorphicComponents
there is no specific proposal about this issue on the wiki.  (It was
mentioned on some mailing list in the last couple of months, but I can't
find the thread now.)

By working correctly I mean that: it is a wart in Haskell'98 that you
can declare a datatype to require some class constraints on contained
elements, but that these extra constraints do not really buy you any
expressive power.  They just force you to repeat the same context decl
on every function that uses such a type.  Ideally, the data decl should
be more like an alias, capturing the constraints as part of the
semantics associated with the type, so that you don't need to mention
the constraints at every usage location of the type.

Of course, there are some details to work out, about where you can
validly omit the constraints, and where they are still required.

Regards,
Malcolm
___
Haskell-prime mailing list
Haskell-prime@haskell.org
http://haskell.org/mailman/listinfo/haskell-prime


Re: instance Functor Set, was: Re: Export lists in modules

2006-02-28 Thread Jim Apple
On 2/28/06, Johannes Waldmann [EMAIL PROTECTED] wrote:
 Malcolm Wallace wrote:

  But if contexts-on-datatypes worked correctly,
 
  data Set a = Ord a = 
 
  then even the real map from Data.Set:
 
  map :: (Ord a, Ord b) = (a - b) - Set a - Set b
 
  could be an instance method of Functor.

 I'd love that. But I don't quite understand:
 do you think this is/should be possible with:
 current Haskell? Haskell-Prime? Current ghc (what extensions)?

as Oleg:

{-# OPTIONS -fglasgow-exts #-}
{-# OPTIONS -fallow-undecidable-instances  #-}

module Map where

import qualified Data.Set

class MyMap f a b where
myMap :: (a - b) - f a - f b
instance (Functor f) = MyMap f a b where
myMap = fmap
instance (Ord a, Ord b) = MyMap Data.Set.Set a b where
myMap = Data.Set.map

Jim
___
Haskell-prime mailing list
Haskell-prime@haskell.org
http://haskell.org/mailman/listinfo/haskell-prime