summaryrefslogtreecommitdiff
path: root/testsuite/tests/ghc-regress/typecheck/should_compile/tc087.hs
blob: 88317bad356c361384583dfa00ab34460c4ac7e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{-# LANGUAGE Rank2Types #-}

module ShouldSucceed where

data SeqView t a              =  Null
                              |  Cons a (t a)

class PriorityQueue q where
    empty			:: (Ord a) => q a
    single			:: (Ord a) => a -> q a
    insert			:: (Ord a) => a -> q a -> q a
    meld			:: (Ord a) => q a -> q a -> q a
    splitMin			:: (Ord a) => q a -> SeqView q a
    insert a q		=  single a `meld` q

toOrderedList q		=  case splitMin q of
   Null			-> []
   Cons a q		-> a : toOrderedList q

insertMany x q		=  foldr insert q x
pqSort q x		=  toOrderedList (insertMany x q)

check			:: forall q. (PriorityQueue q) => (forall a. Ord a => q a) -> IO ()
check empty		=  do
    putStr "*** sorting\n"
    out (pqSort empty [1 .. 99])
    out (pqSort empty [1.0, 1.1 ..99.9])

out				:: (Num a) => [a] -> IO ()
out x | sum x == 0		=  putStr "ok\n"
      | otherwise		=  putStr "ok\n"