Yampa-0.10.0: src/FRP/Yampa/Loop.hs
{-# LANGUAGE GADTs, Rank2Types, CPP #-}
-----------------------------------------------------------------------------------------
-- |
-- Module : FRP.Yampa.Loop
-- Copyright : (c) Antony Courtney and Henrik Nilsson, Yale University, 2003
-- License : BSD-style (see the LICENSE file in the distribution)
--
-- Maintainer : ivan.perez@keera.co.uk
-- Stability : provisional
--
-- Portability : non-portable -GHC extensions-
--
-- Well-initialised loops
-----------------------------------------------------------------------------------------
module FRP.Yampa.Loop (
-- * Loops with guaranteed well-defined feedback
loopPre, -- :: c -> SF (a,c) (b,c) -> SF a b
loopIntegral, -- :: VectorSpace c s => SF (a,c) (b,c) -> SF a b
) where
import Control.Arrow
import FRP.Yampa.InternalCore (SF)
import FRP.Yampa.Integration
import FRP.Yampa.Delays
import FRP.Yampa.VectorSpace
-- * Loops with guaranteed well-defined feedback
-- | Loop with an initial value for the signal being fed back.
loopPre :: c -> SF (a,c) (b,c) -> SF a b
loopPre c_init sf = loop (second (iPre c_init) >>> sf)
-- | Loop by integrating the second value in the pair and feeding the
-- result back. Because the integral at time 0 is zero, this is always
-- well defined.
loopIntegral :: VectorSpace c s => SF (a,c) (b,c) -> SF a b
loopIntegral sf = loop (second integral >>> sf)
-- Vim modeline
-- vim:set tabstop=8 expandtab: