Re: [Haskell-cafe] Data.Typeable TypeRep Ord instance.

2010-12-30 Thread Serguey Zefirov
2010/12/30 Andreas Baldeau andr...@baldeau.net:
 instance Ord TypeRep where
    compare t1 t2 =
        compare
            (unsafePerformIO (typeRepKey t1))
            (unsafePerformIO (typeRepKey t2))

I think it would suffice. Thank you for a tip.

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Data.Typeable TypeRep Ord instance.

2010-12-29 Thread Andreas Baldeau
On 01:08 Sun 05 Dec , Serguey Zefirov wrote:
 Why TypeRep does have equality and doesn't have ordering?
 
 It would be good to have that.

I think the problem is, that it's hard to give an ordering that stays the
same for all runs of your program. If you don't need this property you could
use typeRepKey to give an instance as follows:

instance Ord TypeRep where
compare t1 t2 =
compare
(unsafePerformIO (typeRepKey t1))
(unsafePerformIO (typeRepKey t2))

I know it's not good style to use unsafePerformIO, but if you look at how
typeRepKey is implemented I think it should be okay:

typeRepKey :: TypeRep - IO Int
typeRepKey (TypeRep (Key i) _ _) = return i

(The Eq instance also uses the key for comparison.)

 Right now when I have to order two type representations I convert them
 to string and then compare. This is somewhat inefficient and not quite
 straightforward.

The implementation above should be efficient but should not be used when
data between multiple runs since the ordering may change.

Andreas

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Data.Typeable TypeRep Ord instance.

2010-12-22 Thread John Meacham
On Sat, Dec 4, 2010 at 2:08 PM, Serguey Zefirov sergu...@gmail.com wrote:
 Why TypeRep does have equality and doesn't have ordering?

 It would be good to have that.

Yes, I have wanted that too. It would make maps from types to values
possible/efficient. There is a very critical path in jhc that use
type-indexed data structures that I have to implement a very hacky
workaround for no Ord instance for TypeRep

John

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Data.Typeable TypeRep Ord instance.

2010-12-04 Thread Tianyi Cui
Why should they? You can compare them in whatever way you like. And there
isn't a natural/inherent sense of total order between types.

On Sun, Dec 5, 2010 at 6:08 AM, Serguey Zefirov sergu...@gmail.com wrote:

 Why TypeRep does have equality and doesn't have ordering?

 It would be good to have that.

 Right now when I have to order two type representations I convert them
 to string and then compare. This is somewhat inefficient and not quite
 straightforward.

 ___
 Haskell-Cafe mailing list
 Haskell-Cafe@haskell.org
 http://www.haskell.org/mailman/listinfo/haskell-cafe




--
Tianyi Cui
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Data.Typeable TypeRep Ord instance.

2010-12-04 Thread Serguey Zefirov
2010/12/5 Tianyi Cui tianyi...@gmail.com:
 Why should they? You can compare them in whatever way you like. And there
 isn't a natural/inherent sense of total order between types.

I cannot compare then the way I'd like. ;)

Consider the following:

data BiMap a = BiMap {
 values :: Map Int a
,indices :: Map a Int
}

It will serve well for Int's, Bool's and Expr's.

Then I decided to store typed Expr's, based on GADTs. Those Expr's
contains type indices and it would be natural to classify BiMaps by
their type indices and look up in there. If I require type indices to
be Typeable, all I need is ordering on TypeRep.

Also, I prototyped hypergraph library with hyperedges as types with
type family as HList of types denoting labels. There I needed ordering
on TypeRep too, again, for efficiency reasons.

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe