A push-pull signal-function FRP system in Haskell