Skip to content

Instantly share code, notes, and snippets.

View chrisdone-artificial's full-sized avatar

Chris Done chrisdone-artificial

View GitHub Profile
@chrisdone-artificial
chrisdone-artificial / wired applicative constrained normal.hs
Created August 26, 2025 13:43
wired applicative constrained normal
{-# language KindSignatures, RankNTypes, GADTs, LambdaCase, GeneralizedNewtypeDeriving #-}
import Data.Functor.Const
import Control.Monad.ConstrainedNormal
import qualified Data.ByteString as S
import qualified Data.ByteString.Char8 as S8
import Data.Functor.Identity
import Data.ByteString (ByteString)
import qualified Data.Map as Map
import Data.Map (Map)
import qualified Data.Set as Set
@chrisdone-artificial
chrisdone-artificial / free monad version applicative wired monad.hs
Last active August 25, 2025 12:26
free monad version applicative wired monad.hs
{-# LANGUAGE KindSignatures #-}
{-# language GADTs, LambdaCase, GeneralizedNewtypeDeriving #-}
import Control.Monad.Free
import Control.Applicative.Free
import qualified Data.ByteString as S
import qualified Data.ByteString.Char8 as S8
import Data.Functor.Identity
import Data.ByteString (ByteString)
import qualified Data.Map as Map
import Data.Map (Map)
@chrisdone-artificial
chrisdone-artificial / Adds gimmie.hs
Created August 21, 2025 20:42
applicative-wired-value-with-builder.hs
{-# LANGUAGE KindSignatures #-}
{-# language GADTs, LambdaCase, GeneralizedNewtypeDeriving #-}
import Control.Applicative.Free
import qualified Data.ByteString as S
import qualified Data.ByteString.Char8 as S8
import Data.Functor.Identity
import Data.ByteString (ByteString)
import qualified Data.Map as Map
import Data.Map (Map)
import qualified Data.Set as Set
@chrisdone-artificial
chrisdone-artificial / applicative-wired monad pattern.hs
Last active August 16, 2025 22:29
applicative-wired monad pattern.hs
{-# language GADTs, LambdaCase #-}
import qualified Data.ByteString as S
import qualified Data.ByteString.Char8 as S8
import Data.Functor.Identity
import Data.ByteString (ByteString)
import qualified Data.Map as Map
import Data.Map (Map)
import qualified Data.Set as Set
import Data.Set (Set)
import Control.Monad.Trans.State.Strict
@chrisdone-artificial
chrisdone-artificial / update-website.sh
Last active July 15, 2025 19:45
update-website.sh
- id: "update-website"
execute-command: "/home/chris/update-website.sh"
# include-command-output-in-response: true
trigger-rule:
and:
- match:
type: "payload-hmac-sha256"
secret: "....
parameter:
source: "header"
# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace ":80" below with your
# domain name.
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-- | Useful utilities for using Lucid with Yesod.
module Yesod.Lucid
(module Yesod.Lucid
,module Yesod
@chrisdone-artificial
chrisdone-artificial / 0readme.md
Created February 7, 2025 14:11
vega lite for a line chart with error bands.json
@chrisdone-artificial
chrisdone-artificial / lt-estimation.md
Last active February 4, 2025 11:05
lt-estimation.md

Mechanics

A method of estimation I've used successfully on a bunch of projects goes like this. Estimations are one of four choices:

  • <hour
  • <day
  • <week
  • <month
@chrisdone-artificial
chrisdone-artificial / fib.hell.hs
Created January 10, 2025 21:30
hell vs ghci fib(35)
{-
20,952,577,648 bytes allocated in the heap
5,725,800 bytes copied during GC
84,856 bytes maximum residency (2 sample(s))
24,704 bytes maximum slop
6 MiB total memory in use (0 MiB lost due to fragmentation)
Tot time (elapsed) Avg pause Max pause
Gen 0 5009 colls, 0 par 0.046s 0.029s 0.0000s 0.0001s
Gen 1 2 colls, 0 par 0.000s 0.000s 0.0001s 0.0001s