Skip to content

Instantly share code, notes, and snippets.

@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
...
@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 / 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 / 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 / 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 / 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 / CurrencyConverter.js
Created October 19, 2012 15:09
Program compiled with haste that fails with a JavaScript error
/* Eval
Evaluate the given thunk t into head normal form.
If the "thunk" we get isn't actually a thunk, just return it.
*/
function E(t) {
if(t instanceof Thunk) {
if(t.f) {
t.x = t.f();
t.f = 0;
}
@HeinrichApfelmus
HeinrichApfelmus / gist:3845711
Created October 6, 2012 18:24
Log for haste-boot (2012-10-06)
peach:~ apfelmus$ haste-boot
Downloading base libs from ekblad.cc
Reading package info from stdin ... done.
Reading package info from stdin ... done.
Reading package info from stdin ... done.
Reading package info from stdin ... done.
Attempting to clone/update: git://github.com/valderman/fursuit.git
Cloning into fursuit...
remote: Counting objects: 134, done.
remote: Compressing objects: 100% (74/74), done.
@HeinrichApfelmus
HeinrichApfelmus / GameLoop.hs
Created October 2, 2012 16:49
Game loop in reactive-banana
{------------------------------------------------------------------------------
reactive-banana
Implementation of an "industry strength" game loop with fixed time step
and variable fps.
See also http://gafferongames.com/game-physics/fix-your-timestep/
-------------------------------------------------------------------------------}
{-# LANGUAGE NoMonomorphismRestriction #-}
module Main where
@HeinrichApfelmus
HeinrichApfelmus / Form.html
Created July 19, 2012 13:42
Problem with 'POST' ajax request and Scotty-0.4.4
<html>
<head>
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" /></script>
<script type="text/javascript" charset="utf-8">
// onLoad Handler
$(function () {
$('#form').submit( function() {
$.post('/submit', { x : $('#x').val() }, function (result) {
$('#x').val(result);