Ticket #4428: Foo.hs

File Foo.hs, 526 bytes (added by rl, 3 years ago)
Line 
1module Foo where
2
3foo :: (Int,Int) -> [Int] -> [Int]
4{-# INLINE foo #-}
5foo (i,n) xs = loop i (xs,i,n)
6  where
7    loop i s
8      | i < n = case step s of
9                  Just (s',x) -> x : loop (i+1) s'
10                  Nothing     -> []
11      | otherwise = case step s of
12                      Just (s',x) -> x : loop (i-1) s'
13                      Nothing     -> []
14
15    {-# INLINE [0] step #-}
16    step (xs,i,k)
17      | i < k     = case xs of (y:ys) -> Just ((ys,i+1+1+1+1+1+1+1,k::Int),y)
18      | otherwise = Nothing
19