Skip to content

Instantly share code, notes, and snippets.

View ekmett's full-sized avatar
🤞

Edward Kmett ekmett

🤞
View GitHub Profile
@ekmett
ekmett / init.vim
Created December 13, 2018 16:34
Current vim config
set nocompatible " be iMproved, required
filetype off " required
set rtp+=~/.vim/bundle/Vundle.vim
set hidden
let g:airline_solarized_bg='dark'
let g:airline_powerline_fonts = 1
let g:airline_theme='luna'
let g:airline_skip_empty_sections = 1
let g:airline_section_a = '' "disable mode
@ekmett
ekmett / CEK.hs
Created July 22, 2018 17:53
A more strongly typed CEK machine
{-# Language StrictData #-}
{-# Language GADTs #-}
{-# Language DeriveTraversable #-}
{-# Language LambdaCase #-}
module CEK where
import Control.Monad (ap)
import Data.Maybe
import Data.Void

-- Prompt

Jon Pretty sat down with Edward Kmett to learn about Haskell.

Jon: Edward, tell me about how haskell can make me a better programmer.

-- End Prompt

Edward: Well I'll start off by saying that it's not going to be easy for you. You're not just learning a new programming language, but also a whole new way of thinking and creating software. The problem is, there are very few people who have the knowledge and experience to teach you this stuff. And even if they did, it would take them years to do so. So what we need is an organization like us. We specialize in teaching people to program.

@ekmett
ekmett / CEK.hs
Created July 22, 2018 17:52
Simple CEK Machine
{-# language StrictData #-}
module CEK where
-- C -- Control
-- E -- Environment
-- (S) -- Store
-- K -- Continuation
data Exp
= Var String
@ekmett
ekmett / PolyLens.hs
Created October 7, 2020 06:44
Towards poly-kinded optics (fusing multiplate and lens)
{-# language DataKinds #-}
{-# language PolyKinds #-}
{-# language RankNTypes #-}
{-# language ConstraintKinds #-}
{-# language DeriveFunctor #-}
{-# language GADTs #-}
{-# language TypeApplications #-}
{-# language ScopedTypeVariables #-}
{-# language FlexibleInstances #-}
{-# language FlexibleContexts #-}
@ekmett
ekmett / Moore.hs
Created May 28, 2015 14:38
Moore for Less
{-# LANGUAGE GADTs #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE RankNTypes #-}
import Control.Applicative
import Control.Comonad
import Data.Bifunctor
@ekmett
ekmett / StateComonad.hs
Created January 6, 2018 15:53
The State Comonad
-- http://comonad.com/reader/2018/the-state-comonad/
-- https://www.reddit.com/r/haskell/comments/7oav51/i_made_a_monad_that_i_havent_seen_before_and_i/
{-# language DeriveFunctor #-}
import Control.Comonad
import Data.Semigroup
data Store s a = Store { peek :: s -> a, pos :: s } deriving Functor
{-# language KindSignatures #-}
{-# language PolyKinds #-}
{-# language DataKinds #-}
{-# language TypeFamilies #-}
{-# language RankNTypes #-}
{-# language NoImplicitPrelude #-}
{-# language FlexibleContexts #-}
{-# language MultiParamTypeClasses #-}
{-# language GADTs #-}
{-# language ConstraintKinds #-}
@ekmett
ekmett / poetic-edda-kmett.txt
Created December 3, 2022 22:41
ChatGPT tells my tale.
Once upon a time,
In the land of code,
There lived a young programmer,
Named Edward Kmett.
He was skilled in many languages,
And excelled in their use,
But one day he stumbled upon,
The mighty Haskell's muse.
@ekmett
ekmett / math_constexpr.h
Last active November 2, 2022 21:56
Computing Spherical Harmonics
#pragma once
#include <limits>
#define _USE_MATH_DEFINES
#include <math.h>
namespace framework {
namespace math_constexpr {
int constexpr abs(int x) {