Ticket #3607: BadArrayCmp.hs

File BadArrayCmp.hs, 719 bytes (added by blarsen, 5 years ago)
Line 
1{-# LANGUAGE BangPatterns #-}
2{-# OPTIONS -Wall #-}
3
4module BadArrayCmp where
5
6import Data.Array.Base
7import Data.Array.Unboxed
8
9
10cmpArrays :: (IArray a1 e, IArray a2 e, Ix i, Ord e)
11          => a1 i e
12          -> a2 i e
13          -> Ordering
14cmpArrays a1 a2 = case compare (bounds a1) (bounds a2) of
15                    LT -> LT
16                    EQ -> go 0
17                    GT -> GT
18  where
19    iMaxPlusOne :: Int
20    iMaxPlusOne = numElements a1
21   
22    go :: Int -> Ordering
23    go !i = if i == iMaxPlusOne
24            then EQ
25            else case compare (unsafeAt a1 i) (unsafeAt a2 i) of
26                   LT -> LT
27                   EQ -> go (i+1)
28                   GT -> GT
29{-# INLINE cmpArrays #-}