Skip to content

Instantly share code, notes, and snippets.

@aavogt
aavogt / Experiment.hs
Last active May 1, 2016 17:55
applying layout modifiers to existentially quantified layouts
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE RankNTypes #-}
import XMonad
import Data.Constraint
-- supplied: seems to be the pattern for layout modifier instances
typicalEntailment :: Read (l' a) :- Read (Mirror l' a)
typicalEntailment = Sub Dict
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverlappingInstances #-}
{-# LANGUAGE GADTs #-}
module A where
a0 :: EqBox A
a0 = EqBox A
data EqBox a where EqBox :: Eq a => a -> EqBox a
@aavogt
aavogt / Insert.hs
Created March 23, 2016 20:09
overload Map and Set insert
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ScopedTypeVariables #-}
-- | properly overload M.insert and S.insert
module Insert where
import Data.Proxy
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE TypeFamilies #-}
import GHC.TypeLits
import Data.Proxy
@aavogt
aavogt / CountM.hs
Created February 29, 2016 20:22
wrap a data in Just if it is missing
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module CountM where
@aavogt
aavogt / Main.hs
Created February 28, 2016 14:03
lookup fields in nested records as if they are actually flat (by enumerating all paths through the nested records)
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverlappingInstances #-}
{-# LANGUAGE PolyKinds #-}
@aavogt
aavogt / C.hs
Created February 22, 2016 18:10
reify does not report the use of PromotedT
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
module C where
class C (a :: Bool)
instance C True
instance C 'False -- ' syntax doesn't make a difference
@aavogt
aavogt / M.hs
Created February 17, 2016 19:59
maintaining type inference when repeating information in an instance head
{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module M where
import Prelude hiding ((.), id)
type Cat a b c = (SameKs a b c, C a b c)
@aavogt
aavogt / CategoryIsh.hs
Created February 17, 2016 04:29
a newtype for HLists of functions
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-partial-type-signatures #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE DataKinds, FlexibleContexts, TemplateHaskell, TypeFamilies, TypeOperators #-}
import Data.Extensible
import Data.Monoid
import Control.Monad.Identity
mkField "a b"
nilR :: Comp First (Field Identity) :* '[]
nilR = Nil