Skip to content

Instantly share code, notes, and snippets.

import Control.Monad (void)
import Control.Applicative
import Data.Foldable (for_)
import Data.Monoid
import Text.Printf
data Attributed m w a = Attributed (m a) w
instance Functor m => Functor (Attributed m w) where
fmap f (Attributed m w) = Attributed (fmap f m) w
import Text.Parsec
import Control.Applicative hiding ((<|>))
import qualified Data.Map as M
import Data.Either (partitionEithers)
import Data.List (intercalate)
import System.IO (hPutStrLn, stderr)
data Word = Splice String | Word String
deriving (Ord, Eq, Show)
@philipnilsson
philipnilsson / gist:8378133
Last active February 25, 2016 23:54
Waterflow python
import functools
def scanl(f,x,it):
return functools.reduce(lambda xs, y: xs + [f(xs[-1],y)], it, [x])
def scanl1(f, it):
return scanl(f, it[0], it[1:])
def scanr1(f, it):
return reversed(scanl1(f, list(reversed(it))))
@philipnilsson
philipnilsson / gist:8375266
Last active January 2, 2016 23:19
Missing integer in arithmetic sequence
#include <stdio.h>
int main(void) {
int n, e, i = 0;
scanf("%d\n", &n);
scanf("%d", &e);
int sum = e, first = e, last = e, len = 1;
int delta;
while (++i < n) {
scanf(" %d", &e);
@philipnilsson
philipnilsson / gist:6998139
Created October 15, 2013 20:28
Use PosParser
-- | Experimental and very simple quasi-quotation of ECMAScript in
-- Haskell. Doesn't support anti-quotation as of now.
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE Rank2Types #-}
module Language.ECMAScript5.Syntax.QuasiQuote (js, jsexpr, jsstmt) where
import qualified Language.Haskell.TH as TH
import Language.Haskell.TH.Quote
@philipnilsson
philipnilsson / gist:6988512
Last active December 25, 2015 14:09
Language.ECMAScript5, unsafeCoerce to universally quantified constructor.
-- | Experimental and very simple quasi-quotation of ECMAScript in
-- Haskell. Doesn't support anti-quotation as of now.
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
module Language.ECMAScript5.Syntax.QuasiQuote (js, jsexpr, jsstmt) where
import qualified Language.Haskell.TH as TH
import Language.Haskell.TH.Quote
import Text.Parsec hiding (parse)
nonEmptySubsequences = foldr comb []
where comb x xs = xs ++ fmap (x:) ([]:xs)
findSum p = filter (p.sum) . nonEmptySubsequences
hasSum p = not.null . findSum p
-- Trying it in the REPL