module Numeric.Interpolation.Private.List where

import qualified Data.List as List


mapAdjacent3 :: (a -> a -> a -> b) -> [a] -> [b]
mapAdjacent3 :: (a -> a -> a -> b) -> [a] -> [b]
mapAdjacent3 a -> a -> a -> b
f [a]
xs0 =
   let xs1 :: [a]
xs1 = Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
drop Int
1 [a]
xs0
       xs2 :: [a]
xs2 = Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
drop Int
1 [a]
xs1
   in  (a -> a -> a -> b) -> [a] -> [a] -> [a] -> [b]
forall a b c d. (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]
List.zipWith3 a -> a -> a -> b
f [a]
xs0 [a]
xs1 [a]
xs2

mapAdjacentMaybe3 :: (Maybe a -> a -> Maybe a -> b) -> [a] -> [b]
mapAdjacentMaybe3 :: (Maybe a -> a -> Maybe a -> b) -> [a] -> [b]
mapAdjacentMaybe3 Maybe a -> a -> Maybe a -> b
f [a]
xs =
   let jxs :: [Maybe a]
jxs = (a -> Maybe a) -> [a] -> [Maybe a]
forall a b. (a -> b) -> [a] -> [b]
map a -> Maybe a
forall a. a -> Maybe a
Just [a]
xs
   in  (Maybe a -> a -> Maybe a -> b)
-> [Maybe a] -> [a] -> [Maybe a] -> [b]
forall a b c d. (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]
zipWith3 Maybe a -> a -> Maybe a -> b
f (Maybe a
forall a. Maybe a
Nothing Maybe a -> [Maybe a] -> [Maybe a]
forall a. a -> [a] -> [a]
: [Maybe a]
jxs) [a]
xs (Int -> [Maybe a] -> [Maybe a]
forall a. Int -> [a] -> [a]
drop Int
1 [Maybe a]
jxs [Maybe a] -> [Maybe a] -> [Maybe a]
forall a. [a] -> [a] -> [a]
++ [Maybe a
forall a. Maybe a
Nothing])

mapAdjacentMaybe5 ::
   (Maybe a -> Maybe a -> a -> Maybe a -> Maybe a -> b) ->
   [a] -> [b]
mapAdjacentMaybe5 :: (Maybe a -> Maybe a -> a -> Maybe a -> Maybe a -> b) -> [a] -> [b]
mapAdjacentMaybe5 Maybe a -> Maybe a -> a -> Maybe a -> Maybe a -> b
f [a]
xs =
   let jxs :: [Maybe a]
jxs = (a -> Maybe a) -> [a] -> [Maybe a]
forall a b. (a -> b) -> [a] -> [b]
map a -> Maybe a
forall a. a -> Maybe a
Just [a]
xs
       lxs1 :: [Maybe a]
lxs1 = Maybe a
forall a. Maybe a
Nothing Maybe a -> [Maybe a] -> [Maybe a]
forall a. a -> [a] -> [a]
: [Maybe a]
jxs
       lxs2 :: [Maybe a]
lxs2 = Maybe a
forall a. Maybe a
Nothing Maybe a -> [Maybe a] -> [Maybe a]
forall a. a -> [a] -> [a]
: [Maybe a]
lxs1
       rxs1 :: [Maybe a]
rxs1 = Int -> [Maybe a] -> [Maybe a]
forall a. Int -> [a] -> [a]
drop Int
1 ([Maybe a] -> [Maybe a]) -> [Maybe a] -> [Maybe a]
forall a b. (a -> b) -> a -> b
$ [Maybe a]
jxs [Maybe a] -> [Maybe a] -> [Maybe a]
forall a. [a] -> [a] -> [a]
++ Maybe a -> [Maybe a]
forall a. a -> [a]
repeat Maybe a
forall a. Maybe a
Nothing
       rxs2 :: [Maybe a]
rxs2 = Int -> [Maybe a] -> [Maybe a]
forall a. Int -> [a] -> [a]
drop Int
1 ([Maybe a] -> [Maybe a]) -> [Maybe a] -> [Maybe a]
forall a b. (a -> b) -> a -> b
$ [Maybe a]
rxs1
   in  (Maybe a -> Maybe a -> a -> Maybe a -> Maybe a -> b)
-> [Maybe a] -> [Maybe a] -> [a] -> [Maybe a] -> [Maybe a] -> [b]
forall a b c d e f.
(a -> b -> c -> d -> e -> f)
-> [a] -> [b] -> [c] -> [d] -> [e] -> [f]
List.zipWith5 Maybe a -> Maybe a -> a -> Maybe a -> Maybe a -> b
f [Maybe a]
lxs2 [Maybe a]
lxs1 [a]
xs [Maybe a]
rxs1 [Maybe a]
rxs2