Skip to content

Instantly share code, notes, and snippets.

View AndrasKovacs's full-sized avatar

András Kovács AndrasKovacs

View GitHub Profile
@AndrasKovacs
AndrasKovacs / RightListT.hs
Last active August 29, 2015 13:55
My shot at ListT done right.
{-# LANGUAGE LambdaCase, DeriveFunctor #-}
import Prelude hiding (take, head)
import Control.Monad
import Control.Monad.Trans
data ListT' m a = Nil | Cons a (ListT m a) deriving (Functor)
newtype ListT m a = ListT {runListT :: m (ListT' m a)} deriving (Functor)
instance Monad m => Monad (ListT m) where
@AndrasKovacs
AndrasKovacs / Notes.hs
Last active August 29, 2015 13:56
Random notes.
{-# LANGUAGE
LambdaCase, DeriveFunctor, FlexibleContexts,
RankNTypes, TemplateHaskell, NoMonomorphismRestriction #-}
-- golfing the state monad with free
import Control.Monad
import Control.Monad.Free
import Control.Monad.Free.TH
@AndrasKovacs
AndrasKovacs / GildedRose.hs
Last active August 29, 2015 13:56
Gilded Rose kata with lens and ADTs (of course we don't observe the original "don't change the data structure" constraint here).
{-# LANGUAGE
TemplateHaskell, LambdaCase, MultiParamTypeClasses,
FlexibleInstances, FunctionalDependencies #-}
import Control.Applicative
import Control.Lens
import Control.Lens.Extras
data Item = Simple {_sellIn :: Int, _quality :: Int, _itemName :: String}
| Conjured {_sellIn :: Int, _quality :: Int, _itemName :: String}
@AndrasKovacs
AndrasKovacs / IAmNotAFiniteNumber.hs
Last active August 29, 2015 13:56
De Bruijn indexing as in "http://www.cs.ru.nl/~james/RESEARCH/haskell2004.pdf" but with statically checked finite indices.
{-# LANGUAGE
DataKinds, GADTs, TypeFamilies,
ScopedTypeVariables, LambdaCase,
TemplateHaskell, StandaloneDeriving,
DeriveFunctor, DeriveFoldable, DeriveTraversable, TypeOperators #-}
import Data.Singletons.TH
import Data.Foldable (Foldable)
import Data.Traversable (Traversable)
@AndrasKovacs
AndrasKovacs / NatProps.hs
Last active August 29, 2015 13:56
Singletons + TypedHoles
{-# LANGUAGE
DataKinds, PolyKinds, TypeFamilies, TemplateHaskell,
ScopedTypeVariables, UndecidableInstances, GADTs, TypeOperators #-}
import Data.Singletons.TH
$(singletons [d|
data Nat = Zero | Succ Nat
(+) :: Nat -> Nat -> Nat
@AndrasKovacs
AndrasKovacs / ArraySnoc.hs
Created May 6, 2014 14:00
Benchmarking primitive array snoc (GHC 7.8.2, 64 bit, -O2, -fllvm)
{-# LANGUAGE MagicHash, UnboxedTuples #-}
import Criterion.Main
import Criterion.Config
import GHC.Exts
import GHC.ST
data Array a = Array (Array# a)
snoc :: Array a -> a -> Array a
@AndrasKovacs
AndrasKovacs / BinNat.agda
Last active August 29, 2015 14:02
Software foundations extra Bin - Nat exercise
open import Function
open import Data.Nat
open import Relation.Binary.PropositionalEquality
open import Data.Nat.Properties.Simple
open import Data.Unit
data Bin : Set where
zero : Bin
2*n 2*n+1 : Bin → Bin
@AndrasKovacs
AndrasKovacs / ListMonad.agda
Last active August 29, 2015 14:05
List is a monad.
open import Data.List
open import Function
open import Relation.Binary.PropositionalEquality
open import Data.Product
open import Algebra
module LM {a}{A : Set a} = Monoid (monoid A)
infixr 5 _>>=_
_>>=_ : ∀ {a b}{A : Set a}{B : Set b} → List A → (A → List B) → List B
@AndrasKovacs
AndrasKovacs / ZipWithN.hs
Last active August 29, 2015 14:05
Polyvariadic zipWith.
{-# LANGUAGE
FlexibleInstances,
MultiParamTypeClasses,
UndecidableInstances,
IncoherentInstances, -- GHC 7.10 can do with only Overlapping
TypeFamilies #-}
class ZipWithN f t where
zipWithN' :: [f] -> t
@AndrasKovacs
AndrasKovacs / Uniplate1.hs
Last active August 29, 2015 14:05
Two flavors of uniplate for indexed types.
-- Lens style ----------------------
-- Kudos for circed for holes and contexts in lens-style: http://stackoverflow.com/questions/25393870/how-can-holes-and-contexts-be-implemented-for-higher-kinded-types-in-a-lens-styl
{-# LANGUAGE GADTs, RankNTypes, PolyKinds, StandaloneDeriving, ScopedTypeVariables #-}
import Control.Applicative
import Control.Monad.Identity