Skip to content

Instantly share code, notes, and snippets.

View tmcgilchrist's full-sized avatar
🐫

Tim McGilchrist tmcgilchrist

🐫
View GitHub Profile
```
OCaml compilation pipeline
┌────────────────┐
│ │
│ Source code │
@tmcgilchrist
tmcgilchrist / prismatic.hs
Created November 27, 2018 04:11 — forked from parsonsmatt/prismatic.hs
I figured out a nice way to pluck exceptions out of a constraint!
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
@tmcgilchrist
tmcgilchrist / Battleship.lhs
Created July 30, 2017 22:51 — forked from ChrisPenner/Battleship.lhs
Hit! You sunk my Adjunction!
Today we'll be looking into Kmett's
[adjunctions](http://hackage.haskell.org/package/adjunctions) library,
particularly the meat of the library in Data.Functor.Adjunction.
This post is a literate haskell file, which means you can load it right up in
ghci and play around with it! Like any good haskell file we need half a dozen
language pragmas and imports before we get started.
> {-# language DeriveFunctor #-}
> {-# language TypeFamilies #-}
@tmcgilchrist
tmcgilchrist / hackage_release.md
Last active May 24, 2017 00:18
Release the hounds aka Push package to Hackage

Releasing to Hackage

  1. Create PR bumping version number
  2. Ensure it's building on CI
  3. Bump version in *.cabal file
  4. Commit new version to repo and push
  5. cabal sdist to generate a package
  6. cabal upload dist/pkg-x.y.x.tar.gz
  7. tag repo with this version
  8. Upload haddock changes
(eval-after-load "haskell-mode"
;; Replace the haskell-mode version with this version,
;; this will line up all imports as if they're all qualified
;; eg this
;;
;; import Data.Monoid
;; import Data.Text
;;
;; becomes
;;
class Show a where
    show :: a -> String

instance Show Int where
    show = ... -- provided by default

show 1 
@tmcgilchrist
tmcgilchrist / gist:11e548b4c3d77d33002d
Created November 10, 2014 21:34
OCaml Project Ideas
General musing on some projects I'd like to try writing with OCaml
- database bindings for MySQL that include proper type checking and embedding sql ala pgocaml
- general application that queries webservice, does DB stuff and then does webservice requests (eg Antiquarian)
- functor/monad/monoid library
- bindings for libyaml
- bindings for https://github.com/joyent/libuv Cross platform async IO
- library for connecting to Riak
- lightwieght monadic regions implementation
- property based testing library
> cat ~/.sbt/0.13/plugins/plugins.sbt
resolvers += Resolver.sonatypeRepo("snapshots")
addSbtPlugin("org.ensime" % "ensime-sbt" % "0.1.5-SNAPSHOT")
> sbt gen-ensime
[info] Loading global plugins from /Users/tim/.sbt/0.13/plugins
[info] Loading project definition from /Users/tim/code/scala/introduction-to-fp-in-scala/project
[info] Set current project to introduction-to-fp-in-scala (in build file:/Users/tim/code/scala/introduction-to-fp-in-scala/)
[error] Not a valid command: gen-ensime
```
___
| |
| |
-------------------
-------------------
| ___ | ___ |
| | | | | | | | |
| |-+-| | |-+-| |
| |_|_| | |_|_| |
@tmcgilchrist
tmcgilchrist / stack.ml
Created May 18, 2014 22:24
Stack Data Type from Purely Function Data Structures.
module type Stack =
sig
type 'a t
val empty : 'a t
val isEmpty : 'a t -> bool
val cons : 'a -> 'a t -> 'a t
val head : 'a t -> 'a
val tail : 'a t -> 'a t
end