blob: dd910f21a9396ef2c6d848d424507a1d51bda6c5 (
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 RankNTypes #-}
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 :: (Eq a, Num a) => [a] -> IO ()
out x | sum x == 0 = putStr "ok\n"
| otherwise = putStr "ok\n"
|