Skip to content

Instantly share code, notes, and snippets.

@HeinrichApfelmus
HeinrichApfelmus / RandomAccessParser.hs
Last active March 21, 2020 13:11
Parsing a random-access format into a pure data structure. Parsing will be lazy: parts of the data structure will be parsed on demand.
import Data.Word
import qualified Data.ByteString as B
type ByteString = B.ByteString
data Tree = Leaf [Word8] | Branch Tree Tree deriving (Eq,Show)
parse :: ByteString -> Tree
parse xs = case view xs of
Cons 0 xs -> case view xs of
Cons length xs -> Leaf . B.unpack $ B.take (fromIntegral . toInteger $ length) xs
@HeinrichApfelmus
HeinrichApfelmus / SnapDebugLogChrome
Last active December 17, 2015 09:59
Web servers fail to serve large files on MacOS X.
-- debug log for querying http://localhost:100000/video.mp4 with Chrome
Listening on http://0.0.0.0:10000/
Can't open log file "log/access.log".
Exception: log/access.log: openFile: does not exist (No such file or directory)
Logging to stderr instead. **THIS IS BAD, YOU OUGHT TO FIX THIS**
Can't open log file "log/error.log".
Exception: log/error.log: openFile: does not exist (No such file or directory)
@HeinrichApfelmus
HeinrichApfelmus / InputElement.hs
Created September 9, 2013 13:41
Implementation of an input element adhering to the three principles laid out in http://apfelmus.nfshost.com/blog/2012/03/29-frp-three-principles-bidirectional-gui.html
{-# LANGUAGE RecordWildCards #-}
import Data.Monoid
import Control.Monad
import qualified Graphics.UI.Threepenny as UI
import Graphics.UI.Threepenny
data Input = Input
@HeinrichApfelmus
HeinrichApfelmus / DynamicEventSwitching.hs
Created October 2, 2013 09:54
Create new behaviors and switch between them.
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE ScopedTypeVariables #-}
import Data.Traversable (sequenceA)
import Reactive.Banana
import Reactive.Banana.Frameworks
newtype Wrapper = Wrapper (forall t. Moment t (Event t () -> Behavior t Integer))
main :: IO ()
@HeinrichApfelmus
HeinrichApfelmus / ipython.log
Created January 20, 2014 14:17
Log of a failed installation of IPython when running `IHaskell notebook`.
------------------------------------------------------------
/Users/apfelmus/.ihaskell/ipython/bin/pip run on Sun Jan 19 23:56:41 2014
Obtaining ipython from git+https://github.com/ipython/ipython.git@9c922f54af799704f4000aeee94ec7c74cada194#egg=ipython-dev
Cloning https://github.com/ipython/ipython.git (to 9c922f54af799704f4000aeee94ec7c74cada194) to /Users/apfelmus/.ihaskell/ipython/src/ipython
Found command 'git' at '/opt/local/bin/git'
Running command /opt/local/bin/git clone -q https://github.com/ipython/ipython.git /Users/apfelmus/.ihaskell/ipython/src/ipython
Running command /opt/local/bin/git submodule update --init --recursive -q
Running command /opt/local/bin/git tag -l
@HeinrichApfelmus
HeinrichApfelmus / 01_ExampleMonadic.hs
Last active October 11, 2018 14:05
Chart library examples — monadic vs pure API
plotSpectrum1 lattice n m = toFile def file $ do
layout_title .= "Spectrum of '" ++ name ++ "'"
layout_x_axis . laxis_title .= "momentum k (" ++ show m ++ " points)"
layout_y_axis . laxis_title .= "energy E"
setColors $ colorGradient blue (length rows)
forM_ rows $ \row -> plot (line "band" [row])
where
...