packages feed

copilot-2.0.3: Examples/Examples2.hs

module Examples2 ( examples2 ) where

import Prelude ()

import Copilot.Language.Prelude
import Copilot.Language
import Copilot.Language.Reify (reify)

import qualified Copilot.Compile.SBV as S

import Data.List (cycle)

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

{-
alt2 :: Stream Word64
alt2 = [0,1,2] ++ alt2 + 1

alt3 :: Stream Bool
alt3 = [True,True,False] ++ alt3

fib' :: Stream Word64
fib' = [0, 1] ++ fib' + drop 1 fib

fib :: Stream Word64
fib = [0, 1] ++ fib + drop 1 fib

fibSpec :: Spec
fibSpec = do
  trigger "fib_out" true [arg fib]
-}

nats :: Stream Word64
nats = [0] ++ nats + 1

alt :: Stream Bool
alt = [True] ++ not alt

logic :: Stream Bool
logic = [True, False] ++ logic || drop 1 logic

sumExterns :: Stream Word64
sumExterns =
  let
    e1 = extern "e1" (Just [0..])
    e2 = extern "e2" (Just $ cycle [2,3,4])
  in
    e1 + e2 + e1

spec :: Spec
spec = do
  trigger "trig1" alt [ arg $ nats < 3
                      , arg sumExterns 
                      , arg logic
                      ]

examples2 :: IO ()
examples2 = do
--  reify fibSpec >>= S.compile S.defaultParams
  reify spec >>= S.compile S.defaultParams