Skip to content

Instantly share code, notes, and snippets.

@Lysxia
Lysxia / FieldNames.hs
Created April 30, 2019 21:28
List of field names for generic record types
{-# LANGUAGE FlexibleContexts, FlexibleInstances, KindSignatures, TypeApplications,
TypeOperators, PolyKinds, ScopedTypeVariables, UndecidableInstances, DeriveGeneric #-}
import GHC.Generics
import Data.Proxy
class GFieldNames (f :: * -> *) where
gFieldNames :: proxy f -> [String]
instance Selector s => GFieldNames (S1 s f) where
@Lysxia
Lysxia / SG.hs
Last active May 3, 2019 12:42
Deriving Semigroup for HKD records
{-# LANGUAGE
AllowAmbiguousTypes,
DeriveGeneric,
FlexibleInstances,
QuantifiedConstraints,
TypeApplications,
UndecidableInstances
#-}
import GHC.Generics
import Control.Applicative
Require Import Vector.
Require Import Program.
Definition fff {A} (h : Vector.t A 0) : h = Vector.nil _ :=
match h in Vector.t _ n return match n return Vector.t A n -> Prop with
| O => fun h => h = Vector.nil _
| S _ => fun _ => True
end h
with
| Vector.nil _ => eq_refl
{-# LANGUAGE
AllowAmbiguousTypes,
FlexibleContexts,
FlexibleInstances,
MultiParamTypeClasses,
UndecidableInstances,
TypeApplications
#-}
import Control.Category hiding ((.), id)
{-# LANGUAGE
EmptyCase,
DataKinds,
PolyKinds,
KindSignatures,
GADTs,
FlexibleContexts,
FlexibleInstances,
{-# LANGUAGE
DataKinds,
PolyKinds,
MultiParamTypeClasses,
TypeOperators,
DeriveGeneric,
KindSignatures,
FlexibleContexts,
FlexibleInstances,
TypeFamilies,
@Lysxia
Lysxia / GadtRead.hs
Created May 15, 2019 22:10
Generic parser for GADT with kind-generics
{-# LANGUAGE
AllowAmbiguousTypes,
TypeApplications,
ScopedTypeVariables,
GADTs,
DataKinds,
PolyKinds,
FlexibleContexts,
FlexibleInstances,
MultiParamTypeClasses,
@Lysxia
Lysxia / GadtRead.hs
Created May 15, 2019 23:06
Generic parser for GADTs with kind-generics (composed with an existential type, in the second half)
{-# LANGUAGE
QuantifiedConstraints,
AllowAmbiguousTypes,
TypeApplications,
ScopedTypeVariables,
RankNTypes,
GADTs,
DataKinds,
PolyKinds,
FlexibleContexts,
{-# LANGUAGE
BlockArguments,
InstanceSigs,
TypeOperators,
DataKinds,
PolyKinds,
RankNTypes,
ScopedTypeVariables,
GADTs
#-}
{-# LANGUAGE
-- Unsurprisingly, we're going to talk about GADTs.
GADTs,
-- Type-level functions, data types, and polymorphism
TypeFamilies,
DataKinds,
PolyKinds,
-- Explicit type applications