Skip to content

Instantly share code, notes, and snippets.

View david-christiansen's full-sized avatar

David Thrane Christiansen david-christiansen

  • Copenhagen, Denmark
View GitHub Profile
module Main
import System.Random.TF.Gen
genNums : Int -> TFGen -> IO TFGen
genNums i gen = if i > 0 then
let (n, gen') = tfGenNext gen in
do putStrLn (show i ++"\t0x"++show n)
genNums (i-1) (fst (split gen'))
else return gen
@david-christiansen
david-christiansen / ErrorReflectionDemo.idr
Created May 1, 2014 11:45
Error reflection demo from today
module ErrorReflectionDemo
import Language.Reflection
import Language.Reflection.Errors
import Language.Reflection.Utils
%language ErrorReflection
data Col = BOOL | STRING | INT
@david-christiansen
david-christiansen / SExpParse.idr
Created March 25, 2014 00:35
Prototype parser for Idris's machine-readable interaction syntax
module SExpParse
import Lightyear.Core
import Lightyear.Combinators
import Lightyear.Strings
%default total
data MessageFmt = KWD String
| STRING
@david-christiansen
david-christiansen / Test.idr
Created February 6, 2014 20:27
Statically checked embedded subset of SQL in Idris
module Test
import Provider
import Database
import Queries
%language TypeProviders
%link C "sqlite3api.o"
%reflection
solveHasTable : Type -> Tactic
solveHasTable (HasTable (_::tl) name s) =
Try (Refine "Here" `Seq` Solve)
(Refine "There" `Seq` (Solve `Seq` solveHasTable (HasTable tl name s)))
solveHasTable (HasTable (a++b) _ _) = Refine "Here" `Seq` Solve
solveHasTable (HasTable _ name s) = Refine "Here" `Seq` Solve
@david-christiansen
david-christiansen / FunErrTest.idr
Created January 23, 2014 15:34
Error reflection now supports specific function arguments
import Language.Reflection.Errors
import Language.Reflection.Utils
%language ErrorReflection
total
cadr : (xs : List a)
-> {auto cons1 : isCons xs = True}
-> {auto cons2 : isCons (tail xs cons1) = True}
-> a
@david-christiansen
david-christiansen / ErrorTest.idr
Created January 10, 2014 10:25
First-ever Idris DSL with domain-specific error messages!
module ErrorTest
import Language.Reflection
import Language.Reflection.Errors
import Language.Reflection.Utils
%language ErrorReflection
data Ty = TUnit | TFun Ty Ty
@david-christiansen
david-christiansen / gist:8336956
Created January 9, 2014 16:19
First reflected error in Idris
drc@drc:~/Documents/Code/Idris/error-reflection-test$ idris ErrorTest.idr
____ __ _
/ _/___/ /____(_)____
/ // __ / ___/ / ___/ Version 0.9.10.1-git:5361547
_/ // /_/ / / / (__ ) http://www.idris-lang.org/
/___/\__,_/_/ /_/____/ Type :? for help
Type checking ./ErrorTest.idr
*ErrorTest> the Nat ""
ERROR HAPPENED!
@david-christiansen
david-christiansen / PreorderReasoning.idr
Created December 14, 2013 18:27
Agda-style preorder reasoning in Idris
module PreOrderReasoning
-- QED is first to get the precedence to work out. It's just refl with an explicit argument.
syntax [expr] "QED" = qed expr
-- foo ={ prf }= bar ={ prf' }= fnord QED
-- is a proof that foo is related to fnord, with the intermediate step being bar, justified by prf and prf'
syntax [from] "={" [prf] "}=" [to] = step from prf to
--These are the components for using the syntax with equality
@david-christiansen
david-christiansen / JSON.idr
Created December 10, 2013 17:58
Zygote of a JSON parser
module JSON
import Data.HVect
import Control.Monad.Identity
import Lightyear.Core
import Lightyear.Combinators
import Lightyear.Strings