packages feed

copilot-2.0.4: Examples/Local.hs

--------------------------------------------------------------------------------
-- Copyright © 2011 National Institute of Aerospace / Galois, Inc.
--------------------------------------------------------------------------------

-- | Example demonstrating local variables.

module Local ( localEx ) where

import Prelude ()
import Language.Copilot

--------------------------------------------------------------------------------

nats :: Stream Int32
nats = [0] ++ (1 + nats)

strm :: Stream Int32
strm =
  local (nats + 1) $ \nats' -> nats' + nats'

-- The above code corresponds to
--
-- strm :: Stream Int32
-- strm =
--   let x = nats * nats
--   in x + x

spec :: Spec
spec = do
  trigger "strm" true [arg strm]
--  trigger "strm" true [arg $ replStrm 100000]
--  trigger "strm" true [arg $ replStrm_ 100000 10000]
  -- observer "nats" nats
  -- observer "strm" strm

--------------------------------------------------------------------------------

localEx :: IO ()
localEx = do
  interpret 20 spec
  prettyPrint spec

--------------------------------------------------------------------------------