Skip to content

Instantly share code, notes, and snippets.

View pkamenarsky's full-sized avatar
💭
I may be slow to respond.

Philip Kamenarsky pkamenarsky

💭
I may be slow to respond.
View GitHub Profile
(reduce (fn [a [k v]]
(if (a k)
(update-in a [k] conj v)
(assoc a k [v])))
{}
...)
/* Thunk
Creates a thunk representing the given closure.
Since we want automatic memoization of as many expressions as possible, we
use a JS object as a sort of tagged pointer, where the member x denotes the
object actually pointed to. If a "pointer" points to a thunk, it has a
member 't' which is set to true; if it points to a value, be it a function,
a value of an algebraic type of a primitive value, it has no member 't'.
When a thunk is evaluated, by reading the member 'x' of the "pointer," the
closure is evaluated and the getter removed, to be replaced with the value
module Main (main) where
{-| The main module
@docs main
-}
import Html exposing (Html, div, button, text)
import Html.Attributes as Html exposing (style)
import Html.Events exposing (onClick)
import StartApp as StartApp
import Data.Lens
import Data.Lens.Index
viewIndex :: forall m a b. (Index m a b) => m -> a -> b
viewIndex m a = view (ix a) m
'use strict';
var PurescriptWebpackPlugin = require('purescript-webpack-plugin');
var src = ['bower_components/purescript-*/src/**/*.purs', 'src/**/*.purs'];
var ffi = ['bower_components/purescript-*/src/**/*.js', 'src/**/*.js'];
var modulesDirectories = [
'node_modules',
@pkamenarsky
pkamenarsky / Generic.hs
Last active August 15, 2016 19:30
Generic fields/values
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators #-}
module Database.Generic where
import Data.Proxy
@pkamenarsky
pkamenarsky / _readme.md
Created January 30, 2017 00:21 — forked from elclanrs/_readme.md
Simple monads in JavaScript with `do` syntax
@pkamenarsky
pkamenarsky / Rs.hs
Last active February 24, 2017 10:22
Rewind monad
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE StandaloneDeriving #-}
module Rs where
import Control.Monad.Free
import qualified Data.Map as M
data RsF m next = ∀ a. RsCheckpoint Int (m a) (a → next) | RsRewind Int

Keybase proof

I hereby claim:

  • I am pkamenarsky on github.
  • I am pkamenarsky (https://keybase.io/pkamenarsky) on keybase.
  • I have a public key ASDnTmZ4WbKnCFcogH9dCldAvg8-4SiG-lwILvJK6RhNRwo

To claim this, I am signing this object:

@pkamenarsky
pkamenarsky / Applicative.hs
Created May 18, 2018 08:17
Applicative example
module Applicative where
-- A real-world example of Applicative.
--
-- Imagine we have a `User` data structure (with all the usual fields) which
-- we must assemble from various data sources, like databases, files, external
-- services and so on.
--
-- One thing our specs call for is that we must log error messages whenever
-- some external service fails or is otherwise unavailable. However, we'd like