Skip to content

Instantly share code, notes, and snippets.

@NathanHowell
NathanHowell / error.txt
Last active January 1, 2016 11:38
GNTD regressions in GHC HEAD. This typechecks on 7.6.3 but not on 7.7.20131217 unless ImpredicativeTypes are enabled.
[1 of 1] Compiling Repro ( repro.hs, interpreted )
repro.hs:24:13:
Cannot instantiate unification variable ‛b0’
with a type involving foralls:
(forall r. (a1 -> IO r) -> IO r) -> DecodeAST a1
Perhaps you want ImpredicativeTypes
In the expression:
GHC.Prim.coerce
(anyContToM ::
@NathanHowell
NathanHowell / gist:6880968
Created October 8, 2013 07:30
Convert a type to a nested tuple, preserving left-to-right ordering via CPS conversion.
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
import Data.Typeable
convert :: (Typeable t, Typeable b) => (forall a . Typeable a => a -> r) -> [t] -> b -> r
convert f (x:xs) b = convert f xs (x, b)
convert f [] b = f b
.cabal-sandbox/
dist/
cabal.config
cabal.sandbox.config
.*.swp
gdb ./a.out
GNU gdb 6.3.50-20050815 (Apple version gdb-1820) (Sat Jun 16 02:40:11 UTC 2012)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin"...Reading symbols for shared libraries .. done
(gdb) run
@NathanHowell
NathanHowell / A.cmm
Last active December 21, 2015 22:09
#include <Cmm.h>
getInfoTable (P_ a)
{
W_ clos, info, type;
clos = UNTAG(a);
info = %GET_STD_INFO(clos);
return (info);
}
@NathanHowell
NathanHowell / thread-fixio.hs
Created August 10, 2013 20:24
Passing a threadID to a thread
import Control.Concurrent
import System.IO
t :: ThreadId -> IO ()
t tid = print ("mah thread", tid)
main :: IO ()
main = do
_tid <- fixIO (forkIO . t)
threadDelay 100000000
@NathanHowell
NathanHowell / cn.hs
Last active August 30, 2023 11:11
Printing out data constructor names using GHC.Generics
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE TypeOperators #-}
import Data.Proxy
import GHC.Generics
@NathanHowell
NathanHowell / curry.hs
Created May 31, 2013 23:36
A proof-of-concept demonstrating the use of Z3 to solve Cabal version constraints for Haskell packages
{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE FlexibleContexts #-}
import Control.Monad.Base
import Control.Monad.Trans.Control
import Control.Concurrent.MSem as MSem
withMSem :: (MonadBaseControl IO m, Integral i) => MSem i -> m a -> m a
withMSem = liftBaseOp_ . MSem.with
@NathanHowell
NathanHowell / gist:5435345
Last active September 17, 2022 20:39
Simple Warp server that can be gracefully shutdown over HTTP.
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where
import Control.Concurrent (forkIO)
import Control.Concurrent.STM
import Control.Monad (when)
import Control.Monad.Trans (liftIO)
import Network.HTTP.Types
import Network.Wai as Wai