Ticket #2715: unbug.hs

File unbug.hs, 0.8 KB (added by rodprice, 4 years ago)

This code compiles fine.

Line 
1{-# LANGUAGE UndecidableInstances #-}
2{-# LANGUAGE TypeFamilies #-}
3{-# LANGUAGE GADTs #-}
4{-# LANGUAGE MultiParamTypeClasses #-}
5{-# LANGUAGE FlexibleContexts #-}
6
7
8
9data Interval v where
10   Intv :: (Ord v, Enum v) => (v,v) -> Interval v
11
12type family Domain (d :: * -> *) :: * -> *
13type instance Domain Interval = Interval 
14
15type family Value (d :: * -> *) :: *
16
17
18class IDomain d where
19   empty   :: (Ord (Value d), Enum (Value d)) => (Domain d) (Value d)
20
21class (Value d1 ~ Value d2) 
22   => IIDomain d1 d2 where
23   equals  :: Domain d1 (Value d1) -> Domain d2 (Value d2) -> Bool
24
25
26instance Ord (Value Interval) 
27      => IDomain Interval where
28   empty                   = Intv (toEnum 1, toEnum 0)
29
30instance Ord (Value Interval) 
31      => IIDomain Interval Interval where
32   equals  (Intv ix) (Intv iy) = ix == iy