Skip to content

Instantly share code, notes, and snippets.

View gallais's full-sized avatar

G. Allais gallais

View GitHub Profile
@gallais
gallais / fact.ml
Created December 6, 2014 21:43
factorial using continuations
let factorial n =
let rec loop n k = match n with
| 0 -> k 1
| n -> loop (n-1) (fun v -> k (v * n)) in
loop n (fun x -> x)
@gallais
gallais / List.hs
Last active August 29, 2015 14:11
Split for lists
{-# LANGUAGE RankNTypes #-}
module List where
import Data.Monoid
newtype List a = Abstr {
apply :: forall z . (Monoid z) => (a -> z) -> z
}
@gallais
gallais / Partition.hs
Last active August 29, 2015 14:11
Partition
module Partition where
import Data.Function.Memoize
type Target = Int
type Digits = Int
type MaxInt = Int
partitionMaxBrute :: Digits -> Target -> MaxInt -> [[Int]]
partitionMaxBrute d t m
@gallais
gallais / Word8Mod.hs
Created December 16, 2014 18:06
Fun with low-level Haskell
{-# LANGUAGE MagicHash #-}
module Word8Mod where
import GHC.Prim
import GHC.Word
f :: Word8 -> Word8 -> Word8
f (W8# x#) (W8# y#) =
let z# = plusWord# x# y#
@gallais
gallais / PowerSet.hs
Created December 28, 2014 23:56
Powersets using masks
{-# LANGUAGE ScopedTypeVariables #-}
module PowerSet where
import Data.Bits
import GHC.Word
-- Here we want to define the powerset of a list xs "in one go"
-- using the masks corresponding to the binary representations
-- of the numbers between 0 and 2 ^ length xs - 1.
@gallais
gallais / ReverseVec.hs
Created January 27, 2015 12:15
Reverse Vec in Haskell without theorem proving
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE ScopedTypeVariables #-}
module ReverseVec where
data Nat = Z | S Nat
@gallais
gallais / phantom-type-alternative.hs
Last active August 29, 2015 14:15
Phantom.Alternative using phantom types
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
module Phantom.Alternative where
-- | universe of validation types
data Validated = Validated
data Unvalidated = Unvalidated
newtype FormData a = MkFD { pfd :: (Maybe String, String) }
@gallais
gallais / Unfold.hs
Created February 22, 2015 00:26
Unfold of a Fix
module Unfold where
newtype Fix f = InFix { outFix :: f (Fix f) }
unfoldFix :: Functor f => (s -> f s) -> s -> Fix f
unfoldFix node = go
where go = InFix . fmap go . node
data ListF a r = LNil | LCons a r
data TreeF a r = TNil | TLeaf a | TBranch r r
@gallais
gallais / tfix.agda
Created February 23, 2015 15:27
Descriptions
module tfix where
open import Data.Unit
open import Data.Product
data Desc : Set₁ where
arg : (A : Set) (d : A → Desc) → Desc
rec : (r : Desc) → Desc
ret : Desc
@gallais
gallais / Url.agda
Last active August 29, 2015 14:18
Url in Agda comments
module Url where
-- We usually start something about TT with the definition
-- of ℕ. So here we go:
data ℕ : Set where
z : ℕ
s : ℕ → ℕ
-- Now we want to embed a url in the comments. Why not use a