grapefruit-examples-0.1.0.0: src/Examples/Grapefruit/Simple.hs
{-|
A Grapefruit example which demonstrates the use of feedback loops.
A button with one star is shown. Each time, the user clicks on the button, one star is added to
the caption of the button. The interesting thing about this is that the button’s input
depends on the button’s output. So you need the 'ArrowLoop' instance of 'UICircuit'.
-}
module Examples.Grapefruit.Simple (
mainCircuit
) where
-- Control
import Control.Applicative as Applicative
import Control.Arrow as Arrow
-- Data
import Data.Record as Record
-- FRP.Grapefruit
import FRP.Grapefruit.Signal.Discrete as DSignal
import FRP.Grapefruit.Signal.Segmented as SSignal
-- Graphics.UI.Grapefruit
import Graphics.UI.Grapefruit.Item as UIItem
import Graphics.UI.Grapefruit.Circuit as UICircuit
import Graphics.UI.Grapefruit.Backend.Basic as BasicUIBackend
-- |The circuit describing the whole application.
mainCircuit :: (BasicUIBackend uiBackend) => UICircuit Window uiBackend era () (DSignal era ())
mainCircuit = proc () -> do
rec let
title = pure "Simple"
text = SSignal.scan "*" (const . ('*' :)) push
X :& Closure := closure `With` X :& Push := push
<- window `with` just pushButton
-< X :& Title := title `With` X :& Text := text
returnA -< closure