packages feed

raw-feldspar-0.1: examples/Tut1_HelloWorld.hs

module Tut1_HelloWorld where

-- This file demonstrates:
--
-- * How to write a very simple program
-- * How to run the program
-- * How to generate C code

import Prelude ()

import Feldspar.Run



-- Interactive programs run in the `Run` monad.

helloWorld :: Run ()
helloWorld = printf "Hello world!\n"

-- `runCompiled` generates C code behind the scene, calls the C compiler and
-- then runs the resulting executable.

test1 = runCompiled helloWorld

-- Many programs can also be run directly in Haskell, without generating C code:

test2 = runIO helloWorld

-- If you want to see the generated code:

test3 = putStrLn $ compile helloWorld

-- Or shorter:

test4 = icompile helloWorld

-- For testing:
testAll = do
    test1
    test2
    test3
    test4
    compareCompiled helloWorld (putStrLn "Hello world!") ""
      -- `compareCompiled` is used to compare the output written to `stdout`
      -- from a Feldspar program with that from a reference Haskell `IO`
      -- program. The last argument will be fed to `stdin` to both the Feldspar
      -- program and the reference.
    compareCompiled helloWorld (runIO helloWorld) ""
      -- The reference can also be obtained using `runIO`, which gives a way to
      -- test that the Feldspar compiler preserves the semantics of `runIO`.