Skip to content

Instantly share code, notes, and snippets.

View kuribas's full-sized avatar

Kristof Bastiaensen kuribas

View GitHub Profile
@kuribas
kuribas / transducers.hs
Last active December 25, 2020 19:12
clojure transducers in haskell
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE MultiWayIf #-}
module Transducer (GenericTDAction, TDAction, StateTDAction,
Transducer, stop, transducer, stateTransducer, writeState,
readState, returnStream, Transducer.map, Transducer.filter,
Transducer.take, Transducer.cat, Transducer.mapcat,
Transducer.remove, Transducer.takeWhile, Transducer.takeNth,
Transducer.drop, Transducer.dropWhile) where
@kuribas
kuribas / effect.scm
Last active November 28, 2020 19:55
effects in scheme
(define string-parser
(let* ((escaped-char (effect (run parse-char #\\)
(run any-char)))
(string-char (alternative (none-of '(#\" #\\))
escaped-char))
(parse-quote (parse-char #\")))
(effect
(let* ((_ (run parse-quote))
(chars (run many string-char))
(_ (run parse-quote)))
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE FlexibleContexts #-}
module AesonTrans (
AesonTrans, fromField, maybeFromField, preTransJSON, postTransJSON,
transFieldModifier)
where
import Data.Aeson
import Data.Aeson.Types
@kuribas
kuribas / delta.grin
Last active September 26, 2020 14:37
delta.grin
grinMain = x <- readList 10
x' <- store x
y <- deltaOfDelta x'
y' <- store y
printAll y'
readList n =
b <- _prim_int_gt n 0
if b then
s <- _prim_read_string
@kuribas
kuribas / parser.hs
Last active June 16, 2020 08:12
xml parser
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables#-}
{-# LANGUAGE FlexibleContexts #-}
module Text.XML.Expat.Tree.Parser where
import Data.Bifunctor
import Control.Monad.Trans (lift)
import Control.Monad.State hiding (fail, lift)
import Control.Applicative hiding (many)
@kuribas
kuribas / subst_broken.hs
Created May 30, 2020 15:38
Subst in unbound broken
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Test where
import GHC.Generics
import Unbound.Generics.LocallyNameless
class GToHttpApiData a where
gToQueryParam :: (String -> String) -> a f -> Text
instance GToHttpApiData b => GToHttpApiData (D1 m b) where
gToQueryParam pref (M1 x) = gToQueryParam pref x
instance (GToHttpApiData (a f), GToHttpApiData (b f))
=> GToHttpApiData (a f :+: b f) where
gToQueryParam pref (L1 a) = gToQueryParam pref a
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE DataKinds #-}
module Test where
import Data.TypeRepMap
data Currency = USD | EUR | JPY
-- | A typesafe money datatype, indexed by currency
newtype Money (a :: Currency) = Money Int
-- | A datatype to hide the currency information, using existential quantification
data SomeMoney = forall (a :: Currency) . SomeMoney {getMoney :: Money a }
@kuribas
kuribas / UnwrapIO.hs
Created November 21, 2019 08:21
unwrap IO
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE RankNTypes #-}
module UnwrapIO where
import Control.Monad
import Control.Monad.Trans
import Control.Monad.Trans.State
import Control.Monad.Trans.Except
import Control.Monad.Trans.Maybe
import Control.Monad.Trans.Reader
@kuribas
kuribas / sums-extract-groups.hs
Last active September 25, 2019 11:06
find subsets with sum
{-# LANGUAGE ScopedTypeVariables #-}
module Sums where
import Data.IntMap.Lazy (IntMap)
import Data.Maybe
import Data.Monoid ((<>))
import qualified Data.IntMap as IntMap
-- find all subsets which add upto the given size, given a function to
-- extract the size. Only pick at most one element from each input subset.
sums :: forall a.(a -> Int) -> Int -> [[a]] -> [[a]]