import System.Exit (exitFailure)
import Control.Foldl (list, purely)
import Control.Monad (when)
import Pipes (each, Producer)
import Pipes.Prelude (fold')
import Pipes.OrderedZip (orderedZip)
main = do
let a = each aVec
b = each bVec
let mergedProd = orderedZip compare a b
(mergedList, _) <- purely fold' list mergedProd
when (mergedList /= result) exitFailure
where
aVec = [1,3,4,6,8]
bVec = [2,3,4,5,8]
result = [(Just 1, Nothing),
(Nothing, Just 2),
(Just 3, Just 3),
(Just 4, Just 4),
(Nothing, Just 5),
(Just 6, Nothing),
(Just 8, Just 8)]