Skip to content

Instantly share code, notes, and snippets.

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module MapDict where
import Generics.SOP
import Generics.SOP.Dict
@kosmikus
kosmikus / Comp.hs
Last active February 1, 2017 09:36
{-# LANGUAGE AllowAmbiguousTypes, ConstraintKinds, RankNTypes, ScopedTypeVariables #-}
module CompTest where
import Generics.SOP
import Generics.SOP.Constraint
-- hcmap :: (HAp h, AllN (Prod h) c xs) => proxy c -> (forall a . c a => f a -> f' a) -> h f xs -> h f' xs
-- hcollapse :: (HCollapse h, SListIN h xs) => h (K a) xs -> CollapseTo h a
hcmapQ ::
{-# LANGUAGE RankNTypes, TypeFamilies, ConstraintKinds #-}
type family F x where
F () = Int
F x = Char
class Foo x where
foo :: x -> F x
f :: (c (), Foo b) => proxy c -> (forall a . c a => a -> b) -> F b
@kosmikus
kosmikus / GShow.hs
Created December 23, 2016 16:33
Full generic show using generics-sop
{-# LANGUAGE FlexibleContexts, TypeApplications, PolyKinds, ScopedTypeVariables, GADTs #-}
{-# LANGUAGE DeriveGeneric #-}
module GShow where
import Data.List (intersperse)
import Generics.SOP
import qualified GHC.Generics as GHC
gshow ::
(Generic a, HasDatatypeInfo a, All2 Show (Code a)) => a -> String
{-# LANGUAGE RankNTypes, ScopedTypeVariables, DataKinds, PolyKinds, TypeOperators #-}
{-# LANGUAGE TypeFamilies #-}
import Generics.SOP
type family Map (f :: k -> l) (xs :: [k]) :: [l]
type instance Map _f '[] = '[]
type instance Map f (x ': xs) = f x ': Map f xs
toNPI :: NP f xs -> NP I (Map f xs)
@kosmikus
kosmikus / Caldav.hs
Created November 24, 2016 13:08
First steps towards extending the servant language with webdav/caldav verbs
{-# LANGUAGE DataKinds, OverloadedStrings #-}
module Servant.Caldav where
import Servant.API
data CaldavMethod =
PROPFIND
| PROPPATCH
| MKCOL
| MKCALENDAR
@kosmikus
kosmikus / HasqlSOP.hs
Created November 24, 2016 12:09
Generically derive hasql encoders and decoders using generics-sop (proof of concept)
{-# LANGUAGE DataKinds, TypeFamilies, FlexibleContexts, ScopedTypeVariables, TypeOperators, DefaultSignatures #-}
{-# LANGUAGE OverloadedStrings, DeriveGeneric #-}
module HasqlSOP where
import Data.Functor.Contravariant
import qualified Data.Map as M
import Data.Text
import Generics.SOP
import qualified GHC.Generics as GHC
import qualified Hasql.Encoders as E
@kosmikus
kosmikus / Test.hs
Created November 23, 2016 13:19
My implementation of generic servant clients
{-# LANGUAGE DataKinds, TypeOperators, DeriveGeneric #-}
{-# LANGUAGE TypeFamilies, UndecidableInstances #-}
{-# LANGUAGE FlexibleInstances, ScopedTypeVariables, FlexibleContexts #-}
{-# LANGUAGE DefaultSignatures, MultiParamTypeClasses #-}
module Test where
import Data.Proxy
import qualified GHC.Generics as GHC
import Generics.SOP
import Servant.API

Keybase proof

I hereby claim:

  • I am kosmikus on github.
  • I am kosmikus (https://keybase.io/kosmikus) on keybase.
  • I have a public key ASAf0yz_-3NnqKIrZ-dwMG2s2RY0JZgXKy5pg9m2eoXr3Qo

To claim this, I am signing this object:

{-# LANGUAGE TypeInType, TypeFamilies, FlexibleInstances #-}
import GHC.Types
type family F (a :: Type) :: Type
class C a where
type D (a :: Type) :: F a
instance (F a ~ Bool) => C a where