diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,10 @@
+2017-05-05 Ivan Perez <ivan.perez@keera.co.uk>
+        * Yampa.cabal: Version bump (0.10.6).
+        * tests/: do not warn if they contain tabs.
+	* src/: Includes combinators to deal with collections,
+	  to iterate over time (for custom/discrete integration),
+          implements ArrowChoice.
+
 2017-04-26 Ivan Perez <ivan.perez@keera.co.uk>
         * .travis.yml: Instruct TravisCI upload package to hackage.
         * Yampa.cabal: Version bump (0.10.5.1).
diff --git a/Yampa.cabal b/Yampa.cabal
--- a/Yampa.cabal
+++ b/Yampa.cabal
@@ -1,5 +1,5 @@
 name: Yampa
-version: 0.10.5.1
+version: 0.10.6
 cabal-version: >= 1.8
 license: BSD3
 license-file: LICENSE
diff --git a/src/FRP/Yampa.hs b/src/FRP/Yampa.hs
--- a/src/FRP/Yampa.hs
+++ b/src/FRP/Yampa.hs
@@ -348,6 +348,7 @@
                           --    -> col (SF b c)
                           --    -> SF (a, Event (col (SF b c) -> col (SF b c)))
                           --          (col c)
+                          --
 
     -- * Discrete to continuous-time signal functions
     -- ** Wave-form generation
@@ -391,7 +392,7 @@
 
 
     -- Temporarily hidden, but will eventually be made public.
-    -- iterFrom,          -- :: (a -> a -> DTime -> b -> b) -> b -> SF a b
+    iterFrom,          -- :: (a -> a -> DTime -> b -> b) -> b -> SF a b
 
     -- * Noise (random signal) sources and stochastic event sources
     noise,                -- :: noise :: (RandomGen g, Random b) =>
diff --git a/src/FRP/Yampa/Integration.hs b/src/FRP/Yampa/Integration.hs
--- a/src/FRP/Yampa/Integration.hs
+++ b/src/FRP/Yampa/Integration.hs
@@ -20,11 +20,10 @@
     count,              -- :: Integral b => SF (Event a) (Event b)
 
     -- * Differentiation
-    derivative          -- :: VectorSpace a s => SF a a         -- Crude!
-
+    derivative,         -- :: VectorSpace a s => SF a a         -- Crude!
 
     -- Temporarily hidden, but will eventually be made public.
-    -- iterFrom,           -- :: (a -> a -> DTime -> b -> b) -> b -> SF a b
+    iterFrom            -- :: (a -> a -> DTime -> b -> b) -> b -> SF a b
 
 ) where
 
diff --git a/src/FRP/Yampa/InternalCore.hs b/src/FRP/Yampa/InternalCore.hs
--- a/src/FRP/Yampa/InternalCore.hs
+++ b/src/FRP/Yampa/InternalCore.hs
@@ -497,6 +497,25 @@
      id = SF $ \x -> (sfId,x)
 #endif
 
+instance ArrowChoice SF where
+    left sf = SF $ \a ->
+                     -- NOTE: there might be a problem with choice here.
+                     -- Do the delta times accumulate for the unused branch?
+                     -- Recommendation by Olivier Charles: take a look
+                     -- at Settable Signals paper, it discusses which
+                     -- option would be best.
+                     case a of
+                       Left x  -> let (sf', b') = sfTF sf x
+                                  in (futureArrowLeft sf', Left b')
+                       Right x -> let sf' = SF' $ \_ -> sfTF sf
+                                  in (futureArrowLeft sf', Right x)
+       where futureArrowLeft fSF = SF' $ \dt a ->
+                case a of
+                  Left x  -> let (sf', b') = sfTF' fSF dt x
+                             in (futureArrowLeft sf', Left b')
+                  Right x -> (futureArrowLeft fSF, Right x)
+          
+
 instance Arrow SF where
     arr    = arrPrim
     first  = firstPrim
diff --git a/src/FRP/Yampa/Simulation.hs b/src/FRP/Yampa/Simulation.hs
--- a/src/FRP/Yampa/Simulation.hs
+++ b/src/FRP/Yampa/Simulation.hs
@@ -103,11 +103,12 @@
 -- at different time steps. If you need to control the main
 -- loop yourself for these or other reasons, use 'reactInit' and 'react'.
 
-reactimate :: IO a                                -- ^ IO initialization action
-              -> (Bool -> IO (DTime, Maybe a))    -- ^ IO input sensing action
-              -> (Bool -> b -> IO Bool)           -- ^ IO actuaction (output processing) action
-              -> SF a b                           -- ^ Signal function
-              -> IO ()
+reactimate :: Monad m
+           => m a                             -- ^ Initialization action
+           -> (Bool -> m (DTime, Maybe a))    -- ^ Input sensing action
+           -> (Bool -> b -> m Bool)           -- ^ Actuaction (output processing) action
+           -> SF a b                          -- ^ Signal function
+           -> m ()
 reactimate init sense actuate (SF {sfTF = tf0}) =
     do
         a0 <- init
diff --git a/src/FRP/Yampa/Switches.hs b/src/FRP/Yampa/Switches.hs
--- a/src/FRP/Yampa/Switches.hs
+++ b/src/FRP/Yampa/Switches.hs
@@ -62,6 +62,9 @@
     rpSwitchZ,    -- [SF a b] -> SF ([a], Event ([SF a b]->[SF a b])) [b]
     drpSwitchZ,   -- [SF a b] -> SF ([a], Event ([SF a b]->[SF a b])) [b]
 
+    -- Application of an SF to a collections
+    parC,         -- SF a b -> SF [a] [b]
+
 ) where
 
 import Control.Arrow
@@ -581,7 +584,7 @@
                 (parAux rf sfs, cs0)
 
 
--- Internal definition. Also used in parallel swithers.
+-- Internal definition. Also used in parallel switchers.
 parAux :: Functor col =>
     (forall sf . (a -> col sf -> col (b, sf)))
     -> col (SF' b c)
@@ -806,6 +809,32 @@
 
 freezeCol :: Functor col => col (SF' a b) -> DTime -> col (SF a b)
 freezeCol sfs dt = fmap (`freeze` dt) sfs
+
+-- Apply an SF to every element of a list.
+parC :: SF a b -> SF [a] [b]
+parC sf = SF $ \as -> let os  = map (sfTF sf) as
+                          bs  = map snd os
+                          sfs = map fst os
+                      in (parCAux sfs, bs)
+
+-- Internal definition. Also used in parallel switchers.
+parCAux :: [SF' a b] -> SF' [a] [b]
+parCAux sfs = SF' tf
+    where
+        tf dt as =
+            let os    = map (\(a,sf) -> sfTF' sf dt a) $ safeZip "parC" as sfs
+                bs    = map snd os
+                sfcs  = map fst os
+            in
+                (listSeq sfcs `seq` parCAux sfcs, listSeq bs)
+
+listSeq :: [a] -> [a]
+listSeq x = x `seq` (listSeq' x)
+
+listSeq' :: [a] -> [a]
+listSeq' []        = []
+listSeq' rs@(a:as) = a `seq` listSeq' as `seq` rs
+
 
 -- Vim modeline
 -- vim:set tabstop=8 expandtab:
diff --git a/src/FRP/Yampa/Utilities.hs b/src/FRP/Yampa/Utilities.hs
--- a/src/FRP/Yampa/Utilities.hs
+++ b/src/FRP/Yampa/Utilities.hs
@@ -43,14 +43,14 @@
 import FRP.Yampa.EventS
 import FRP.Yampa.Hybrid
 
--- * Window sampling
+-- | Window sampling
+--
 -- First argument is the window length wl, second is the sampling interval t.
 -- The output list should contain (min (truncate (T/t) wl)) samples, where
 -- T is the time the signal function has been running. This requires some
 -- care in case of sparse sampling. In case of sparse sampling, the
 -- current input value is assumed to have been present at all points where
 -- sampling was missed.
-
 sampleWindow :: Int -> Time -> SF a (Event [a])
 sampleWindow wl q =
     identity &&& afterEachCat (repeat (q, ()))
diff --git a/tests/AFRPTests.hs b/tests/AFRPTests.hs
--- a/tests/AFRPTests.hs
+++ b/tests/AFRPTests.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTests.hs,v 1.27 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsAccum.hs b/tests/AFRPTestsAccum.hs
--- a/tests/AFRPTestsAccum.hs
+++ b/tests/AFRPTestsAccum.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsAccum.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsArr.hs b/tests/AFRPTestsArr.hs
--- a/tests/AFRPTestsArr.hs
+++ b/tests/AFRPTestsArr.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsArr.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsBasicSF.hs b/tests/AFRPTestsBasicSF.hs
--- a/tests/AFRPTestsBasicSF.hs
+++ b/tests/AFRPTestsBasicSF.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsBasicSF.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsCOC.hs b/tests/AFRPTestsCOC.hs
--- a/tests/AFRPTestsCOC.hs
+++ b/tests/AFRPTestsCOC.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsCOC.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsCommon.hs b/tests/AFRPTestsCommon.hs
--- a/tests/AFRPTestsCommon.hs
+++ b/tests/AFRPTestsCommon.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsCommon.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsComp.hs b/tests/AFRPTestsComp.hs
--- a/tests/AFRPTestsComp.hs
+++ b/tests/AFRPTestsComp.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsComp.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsDelay.hs b/tests/AFRPTestsDelay.hs
--- a/tests/AFRPTestsDelay.hs
+++ b/tests/AFRPTestsDelay.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsDelay.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsDer.hs b/tests/AFRPTestsDer.hs
--- a/tests/AFRPTestsDer.hs
+++ b/tests/AFRPTestsDer.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsDer.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsEmbed.hs b/tests/AFRPTestsEmbed.hs
--- a/tests/AFRPTestsEmbed.hs
+++ b/tests/AFRPTestsEmbed.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsEmbed.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsEvSrc.hs b/tests/AFRPTestsEvSrc.hs
--- a/tests/AFRPTestsEvSrc.hs
+++ b/tests/AFRPTestsEvSrc.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsEvSrc.hs,v 1.3 2003/12/19 15:32:22 henrik Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsFirstSecond.hs b/tests/AFRPTestsFirstSecond.hs
--- a/tests/AFRPTestsFirstSecond.hs
+++ b/tests/AFRPTestsFirstSecond.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsFirstSecond.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsKSwitch.hs b/tests/AFRPTestsKSwitch.hs
--- a/tests/AFRPTestsKSwitch.hs
+++ b/tests/AFRPTestsKSwitch.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsKSwitch.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsLaws.hs b/tests/AFRPTestsLaws.hs
--- a/tests/AFRPTestsLaws.hs
+++ b/tests/AFRPTestsLaws.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsLaws.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsLoop.hs b/tests/AFRPTestsLoop.hs
--- a/tests/AFRPTestsLoop.hs
+++ b/tests/AFRPTestsLoop.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsLoop.hs,v 1.6 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsLoopIntegral.hs b/tests/AFRPTestsLoopIntegral.hs
--- a/tests/AFRPTestsLoopIntegral.hs
+++ b/tests/AFRPTestsLoopIntegral.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsLoopIntegral.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsLoopLaws.hs b/tests/AFRPTestsLoopLaws.hs
--- a/tests/AFRPTestsLoopLaws.hs
+++ b/tests/AFRPTestsLoopLaws.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsLoopLaws.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsLoopPre.hs b/tests/AFRPTestsLoopPre.hs
--- a/tests/AFRPTestsLoopPre.hs
+++ b/tests/AFRPTestsLoopPre.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsLoopPre.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsPSwitch.hs b/tests/AFRPTestsPSwitch.hs
--- a/tests/AFRPTestsPSwitch.hs
+++ b/tests/AFRPTestsPSwitch.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsPSwitch.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsPre.hs b/tests/AFRPTestsPre.hs
--- a/tests/AFRPTestsPre.hs
+++ b/tests/AFRPTestsPre.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsDelay.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsRPSwitch.hs b/tests/AFRPTestsRPSwitch.hs
--- a/tests/AFRPTestsRPSwitch.hs
+++ b/tests/AFRPTestsRPSwitch.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsRPSwitch.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsRSwitch.hs b/tests/AFRPTestsRSwitch.hs
--- a/tests/AFRPTestsRSwitch.hs
+++ b/tests/AFRPTestsRSwitch.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsRSwitch.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsReact.hs b/tests/AFRPTestsReact.hs
--- a/tests/AFRPTestsReact.hs
+++ b/tests/AFRPTestsReact.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsReact.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsSscan.hs b/tests/AFRPTestsSscan.hs
--- a/tests/AFRPTestsSscan.hs
+++ b/tests/AFRPTestsSscan.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id$
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsSwitch.hs b/tests/AFRPTestsSwitch.hs
--- a/tests/AFRPTestsSwitch.hs
+++ b/tests/AFRPTestsSwitch.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsSwitch.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsTask.hs b/tests/AFRPTestsTask.hs
--- a/tests/AFRPTestsTask.hs
+++ b/tests/AFRPTestsTask.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsTask.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsUtils.hs b/tests/AFRPTestsUtils.hs
--- a/tests/AFRPTestsUtils.hs
+++ b/tests/AFRPTestsUtils.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsUtils.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/AFRPTestsWFG.hs b/tests/AFRPTestsWFG.hs
--- a/tests/AFRPTestsWFG.hs
+++ b/tests/AFRPTestsWFG.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: AFRPTestsWFG.hs,v 1.2 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
diff --git a/tests/testAFRPMain.hs b/tests/testAFRPMain.hs
--- a/tests/testAFRPMain.hs
+++ b/tests/testAFRPMain.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-tabs #-}
 {- $Id: testAFRPMain.hs,v 1.9 2003/11/10 21:28:58 antony Exp $
 ******************************************************************************
 *                                  A F R P                                   *
