Idris-dev/samples/vadd.idr
Jan de Muijnck-Hughes af72159e60 Sphinx Based Documentation for Idris.
Sphinx provides a retargatable documentation system for documentation, and code. Allowing for HTML, LaTeX, and ePub documents to be generated from a single source.
ReadTheDocs is a free service for Open Source Projects that provides continuous delivery of documents that use either Sphinx or MakeDoc.

This commit provides Sphinx based versions of:

+ The Idris Tutorial
+ The Effects Tutorial
+ Select articles from the Wiki to begin a language reference
+ Select articles from the Wiki to begin short guides.

The examples from the effect tutorial have been integrated as well.

In the `docs` folder see `README.md` for dependencies, Sphinx is easily obtainable from all major Linux ditributions and through brew on Mac OS X.

+ Running `make html` will produce a monolithic html website for use with readthedocs.
+ Running `make latexpdf` will produce individual PDFs for each of the above tutorials.
+ Running `make epub` will produce a monolithic epub. This will need to be adapted to either produce one of the above document sets, or individual epubs.

Future work will be to:

+ Integrate idris with readthedocs for documentation generation for tagged released..
+ Add latex and html generation to the travis builds.
+ Add
2015-03-17 16:19:11 +00:00

42 lines
1.3 KiB
Idris

module Main
import Effects
import Effect.Exception
import Effect.StdIO
parseNumber : String -> { [EXCEPTION String] } Eff Int
parseNumber str
= if all (\x => isDigit x || x == '-') (unpack str)
then pure (cast str)
else raise "Not a number"
vadd : Vect n Int -> Vect n Int -> Vect n Int
vadd [] [] = []
vadd (x :: xs) (y :: ys) = x + y :: vadd xs ys
vadd_check : Vect n Int -> Vect m Int ->
{ [EXCEPTION String] } Eff (Vect m Int)
vadd_check {n} {m} xs ys with (decEq n m)
vadd_check {n} {m=n} xs ys | (Yes Refl) = pure (vadd xs ys)
vadd_check {n} {m} xs ys | (No _) = raise "Length mismatch"
read_vec : { [STDIO] } Eff (p ** Vect p Int)
read_vec = do putStr "Number (-1 when done): "
case run {m=Maybe} (parseNumber (trim !getStr)) of
Nothing => do putStrLn "Input error"
read_vec
Just v => if (v /= -1)
then do (_ ** xs) <- read_vec
pure (_ ** v :: xs)
else pure (_ ** [])
do_vadd : { [STDIO, EXCEPTION String] } Eff ()
do_vadd = do putStrLn "Vector 1"
(_ ** xs) <- read_vec
putStrLn "Vector 2"
(_ ** ys) <- read_vec
putStrLn (show !(vadd_check xs ys))
main : IO ()
main = run do_vadd