This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(reduce (fn [a [k v]] | |
(if (a k) | |
(update-in a [k] conj v) | |
(assoc a k [v]))) | |
{} | |
...) |
NewerOlder