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 / SysF.hs
Created December 1, 2018 12:19
intrinsic deep system F syntax in Haskell
{-# language
TypeInType, GADTs, RankNTypes, TypeFamilies,
TypeOperators, TypeApplications,
UnicodeSyntax, UndecidableInstances
#-}
import Data.Kind
import Data.Proxy
data Nat = Z | S Nat
@AndrasKovacs
AndrasKovacs / FunListPerm.hs
Last active November 7, 2018 16:50
Funlist permutations challenge
{-# language GADTs #-}
-- https://www.reddit.com/r/haskell/comments/9uz2f5/code_challenge_welltyped_tree_node_order/
data Tree a where
OneT :: a -> Tree a
Ap :: (a -> b -> c) -> Tree a -> Tree b -> Tree c
data FunList a where
@AndrasKovacs
AndrasKovacs / AB.agda
Last active September 11, 2018 10:20
Solution to SO question
-- https://stackoverflow.com/questions/52244800/how-to-normalize-rewrite-rules-that-always-decrease-the-inputs-size/52246261#52246261
open import Relation.Binary.PropositionalEquality
open import Data.Nat
open import Relation.Nullary
open import Data.Empty
open import Data.Star
data AB : Set where
A : AB -> AB
@AndrasKovacs
AndrasKovacs / ReverseTraversable.hs
Last active August 13, 2018 15:13
Total reversing for Traversable
{-# language
TypeInType, ScopedTypeVariables, RankNTypes,
GADTs, TypeOperators, TypeApplications, BangPatterns
#-}
-- requires ghc-typelits-natnormalise
{-# options_ghc -fplugin GHC.TypeLits.Normalise #-}
{-|
Tested with ghc-8.4.3
data Ty : Set where
ι : Ty
_⇒_ : Ty → Ty → Ty
infixr 3 _⇒_
data Con : Set where
∙ : Con
_▶_ : Con → Ty → Con
infixl 3 _▶_
@AndrasKovacs
AndrasKovacs / MinimalDepTC.hs
Created June 9, 2018 11:28
Minimal bidirectional dependent type checker with type-in-type. Related to Coquand's algorithm.
{-# language OverloadedStrings, UnicodeSyntax, LambdaCase,
ViewPatterns, NoMonomorphismRestriction #-}
{-# options_ghc -fwarn-incomplete-patterns #-}
{- Minimal bidirectional dependent type checker with type-in-type. Related to Coquand's
algorithm. #-}
import Prelude hiding (all)
@AndrasKovacs
AndrasKovacs / TypeLambdasNoSingletons.hs
Created May 13, 2018 18:38
Type lambdas without singletons dependency
{-# language ScopedTypeVariables, RankNTypes, TypeFamilies,
UndecidableInstances, GADTs, TypeOperators,
TypeApplications, AllowAmbiguousTypes, TypeInType,
StandaloneDeriving #-}
import Data.Kind
-- singletons
--------------------------------------------------------------------------------
@AndrasKovacs
AndrasKovacs / TypeLambdas.hs
Last active September 23, 2019 14:48
Type lambdas and induction with GHC 8.4.2 and singletons
{-# language TemplateHaskell, ScopedTypeVariables, RankNTypes,
TypeFamilies, UndecidableInstances, DeriveFunctor, GADTs,
TypeOperators, TypeApplications, AllowAmbiguousTypes,
TypeInType, StandaloneDeriving #-}
import Data.Singletons.TH -- singletons 2.4.1
import Data.Kind
-- some standard stuff for later examples' sake
@AndrasKovacs
AndrasKovacs / STLCSubst.agda
Last active March 2, 2025 02:50
Example of complete STLC substitution calculus
{-# OPTIONS --without-K #-}
{-
Below is an example of proving *everything* about the substitution calculus of a
simple TT with Bool.
The more challenging solution:
- If substitutions are defined as lists of terms, then if you manage to
prove that substitutions form a category, almost certainly you're done,
since you can only prove this is you have all relevant lemmas.
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveFunctor #-}
import Data.Kind
import Data.Coerce
-- type synonyms
--------------------------------------------------------------------------------