Skip to content

Instantly share code, notes, and snippets.

View FranklinChen's full-sized avatar

Franklin Chen FranklinChen

View GitHub Profile
{-# LANGUAGE RankNTypes, DeriveFunctor #-}
{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
module Main where
import Criterion.Main (defaultMain, bench, bgroup, nf)
--------------------------------------------------------------------------------
-- Fixed points of a functor
newtype Mu f = Mu { muF :: f (Mu f) }
@FranklinChen
FranklinChen / walk-tree.hs
Created April 26, 2015 03:09
Merge a list of annotations into selected nodes of a tree, with error recovery and reporting
-- | Something for work, prototyped first in Haskell before turning
-- into Scala
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE LambdaCase #-}
import Test.Hspec
import Control.Monad.State
{-# LANGUAGE OverloadedStrings #-}
import Data.String
data Value = VInt Int
| VString String
-- In order to hide the unitype details from the user.
instance Show Value where
show (VInt i) = show i
@FranklinChen
FranklinChen / PointFreeExample.hs
Created October 6, 2014 03:23
Example of point-free style
import Control.Category ((>>>))
data Option = Option { name :: String }
-- Point-free style. Is this readable?
--
-- An Option matches a String if: we get the name of the Option and then prepend "--" to it, test whether that is equal
-- to the given String.
matches :: Option -> String -> Bool
matches = name >>> ("--" ++) >>> (==)
@FranklinChen
FranklinChen / spark.hs
Last active August 29, 2015 14:04
Spark line
-- Response to https://twitter.com/mfeathers/status/495979138365149184
-- Based on http://git.zx2c4.com/spark/tree/spark.c
import System.IO (hPutStrLn, stderr)
import System.Environment (getArgs)
import qualified Data.ByteString as B
import qualified Data.ByteString.Char8 as C
main :: IO ()
main = do
sealed trait Interact[A]
case class Ask(prompt: String)
extends Interact[String]
case class Tell(msg: String)
extends Interact[Unit]
trait Monad[M[_]] {
def pure[A](a: A): M[A]
// Illustrate disciplined C++ code
// http://www.cplusplus.com/reference/vector/vector/
#include <vector>
#include <iostream>
using namespace std;
class Foo {
public: