Skip to content

Instantly share code, notes, and snippets.

@NathanHowell
NathanHowell / 1.idr
Last active March 23, 2016 14:57
A port of `Fin` and `natToFin` from Idris to Haskell.
module Data.Fin
%default total
%access public export
||| Numbers strictly less than some bound. The name comes from "finite sets".
|||
||| It's probably not a good idea to use `Fin` for arithmetic, and they will be
||| exceedingly inefficient at run time.
||| @ n the upper bound
@NathanHowell
NathanHowell / stack.yaml
Created February 3, 2016 06:28
GHC 8.0 release candidate stack/stackage yaml
resolver: ghc-8.0.0.20160111
setup-info:
ghc:
linux64:
8.0.0.20160111:
url: "http://downloads.haskell.org/~ghc/8.0.1-rc1/ghc-8.0.0.20160111-x86_64-deb7-linux.tar.xz"
content-length: 111404852
sha1: 30d39c6ca6994dcafe25595e053035ad23198b52
macosx:
8.0.0.20160111:
@NathanHowell
NathanHowell / value-promotion.hs
Last active September 30, 2015 21:32
Example of promoting a value to a type using higher ranked types, continuation passing and GADTs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main where
import Data.Proxy
import Data.Type.Equality
@NathanHowell
NathanHowell / please-no.hs
Created June 23, 2015 07:36
Really terrible HTTP CONNECT proxy for Haskell/WAI
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
import Control.Concurrent (forkIO, newEmptyMVar, putMVar, takeMVar)
import Control.Exception (finally)
import Control.Monad
import Control.Monad.Trans (liftIO)
import Data.ByteString.Char8 ()
import qualified Data.ByteString as B
import Data.Monoid
@NathanHowell
NathanHowell / JsonSchemaRDD.scala
Created November 15, 2014 00:37
SchemaRDD to row JSON conversion
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
foo :: Int -> Int
foo x | x > 0 = x -1
foo x | otherwise = 0
@NathanHowell
NathanHowell / generic-fold.hs
Last active August 29, 2015 14:06
Foldable for GHC.Generic instances
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
import GHC.Generics
import Data.Foldable as Foldable
import Data.Monoid
{-# LANGUAGE RankNTypes #-}
import qualified GHC.Event
data TimerManager2 = TimerManager2
{ registerTimeout :: Int -> GHC.Event.TimeoutCallback -> IO GHC.Event.TimeoutKey
, updateTimeout :: GHC.Event.TimeoutKey -> Int -> IO ()
, unregisterTimeout :: GHC.Event.TimeoutKey -> IO ()
}
@NathanHowell
NathanHowell / centos7-upgrade.sh
Created July 26, 2014 22:44
Upgrade CentOS 6.5 to 7.0.1406 using the prerelease upgrade tools
#!/bin/bash
set -e
cat > /etc/yum.repos.d/upgrade.repo <<END
[upgrade]
name=upgrade
baseurl=http://dev.centos.org/centos/6/upg/x86_64/
enabled=1
gpgcheck=0
END
@NathanHowell
NathanHowell / ReaderT
Created July 20, 2014 07:39 — forked from jg/ReaderT
connectionUrl :: Monad m => ReaderT m Config B.ByteString
-- withConnection
-- :: (Database.PostgreSQL.Simple.Internal.Connection -> IO c)
-- -> ReaderT Config IO c
withConnection f = do
url <- connectionUrl
liftIO $ bracket (connectPostgreSQL url) close f