Skip to content

Instantly share code, notes, and snippets.

{-# LANGUAGE DerivingStrategies, DerivingVia, TypeOperators, DataKinds,
DeriveGeneric #-}
module Rec where
import SameRepAs
import GHC.Generics ( Generic )
import qualified Data.Monoid as M
{-# LANGUAGE StandaloneKindSignatures, DataKinds, DerivingStrategies,
TypeFamilies, GeneralizedNewtypeDeriving, DeriveGeneric,
TypeOperators, UndecidableInstances,
TypeApplications, ScopedTypeVariables,
FlexibleContexts, ConstraintKinds #-}
module HRecord where
import Data.Kind ( Type )
import GHC.Generics
{-# LANGUAGE DerivingStrategies, DerivingVia, TypeOperators, DataKinds,
DeriveGeneric #-}
module Rec where
import SameRepAs
import GHC.Generics ( Generic )
import qualified Data.Monoid as M
@sjoerdvisscher
sjoerdvisscher / LinearStateMonad.hs
Last active June 18, 2022 13:49
Alternative ways to write the linear quicksort from https://www.tweag.io/blog/2021-02-10-linear-base/
{-# LANGUAGE LinearTypes #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE QualifiedDo #-}
import Prelude.Linear hiding (partition)
import qualified Control.Functor.Linear as Linear
import Control.Functor.Linear (State, state, execState, pure)
import qualified Data.Array.Mutable.Linear as Array
@sjoerdvisscher
sjoerdvisscher / jules.hs
Created February 6, 2021 20:52
Van Laarhoven versions of Jules Hedges' stochastic lenses
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
import Data.Coerce (coerce)
import Data.Functor.Compose (Compose (..))
data Vector
@sjoerdvisscher
sjoerdvisscher / wtf.ts
Created February 3, 2021 12:05
wtf ala typescript
// term variables
let z : int = 123
let y : int = z
// anonymous products & inline types
let k : [ int, int, int ] = [ 1, 2, 3 ]
// sum types and type variables
type Q = A(int) | B(bool)
let qA : Q = A(123)
@sjoerdvisscher
sjoerdvisscher / FreeCocompl.hs
Last active October 7, 2020 12:08
Free Cocompletion
{-# LANGUAGE RankNTypes, TypeOperators, PolyKinds, FunctionalDependencies, FlexibleInstances, StandaloneKindSignatures, DataKinds #-}
import Prelude hiding (id, (.))
import Control.Category
import Control.Arrow ((+++))
import Data.Kind (Constraint, Type)
type Cat ob = ob -> ob -> Type
type F ob = ob -> Type
-- a presheaf is a functor from C^op to Hask
@sjoerdvisscher
sjoerdvisscher / OpenStarSemiring.lhs
Created June 14, 2020 13:31
Playing with 'A Very General Method of Computing Shortest Paths'
This is an extension of "A Very General Method of Computing Shortest Paths" to use "open matrices".
This is from a paper "The Open Algebraic Path Problem" by Jade Master https://arxiv.org/abs/2005.06682
> {-# LANGUAGE TypeFamilies #-}
> {-# LANGUAGE TypeApplications #-}
> {-# LANGUAGE FlexibleContexts #-}
> {-# LANGUAGE StandaloneDeriving #-}
> {-# LANGUAGE AllowAmbiguousTypes #-}
> {-# LANGUAGE ScopedTypeVariables #-}
> module OpenStarSemiring where
@sjoerdvisscher
sjoerdvisscher / DistT.hs
Last active June 6, 2020 11:22
A distribution monad transformer
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE RankNTypes #-}
module Control.Monad.Trans.DistT where
import Data.List.NonEmpty (NonEmpty(..))
import Control.Monad.Trans.Class
import Control.Monad.Trans.Free
import Control.Arrow (Arrow(first))
import Control.Applicative (liftA2, Alternative(..))
@sjoerdvisscher
sjoerdvisscher / nucleus.hs
Last active September 25, 2021 06:36
Nucleus of a profunctor
{-# LANGUAGE
PolyKinds
, RankNTypes
, TypeFamilies
, TypeOperators
, TypeApplications
, FlexibleInstances
, ScopedTypeVariables
, AllowAmbiguousTypes
, MultiParamTypeClasses