Skip to content

Instantly share code, notes, and snippets.

@dvberkel
Created June 19, 2016 08:11
Show Gist options
  • Save dvberkel/ffdd4f7f9b275104831562cba60fefe5 to your computer and use it in GitHub Desktop.
Save dvberkel/ffdd4f7f9b275104831562cba60fefe5 to your computer and use it in GitHub Desktop.
Generate Trees in Elm
import Html exposing (Html, text, div, button)
import Html.App exposing (beginnerProgram)
import Html.Events exposing (onClick)
import Random exposing (Generator, Seed, step, initialSeed, andThen, map, map2, int)
main =
beginnerProgram {
model = init 0
, view = view
, update = update
}
type Tree =
Leaf Int
| Node Tree Tree
tree : Generator Tree
tree =
let
createNode left right =
Node left right
selectTreeGenerator : Int -> Generator Tree
selectTreeGenerator n =
case n of
0 -> map2 createNode tree tree
_ -> map (\n -> Leaf n) (int 0 10)
in
(int 0 2) `andThen` selectTreeGenerator
type alias Model = { tree : Tree, seed : Seed }
init : Int -> Model
init n =
let
seed = initialSeed n
(t, seed') = step tree seed
in
{ tree = t, seed = seed' }
type Message =
DoNothing
| GenerateTree
update : Message -> Model -> Model
update message model =
case message of
DoNothing -> model
GenerateTree ->
let
(t, seed') = step tree model.seed
in
{ model | tree = t, seed = seed' }
view : Model -> Html Message
view model =
div [] [
button [onClick GenerateTree ] [ text "go" ]
, text (toString model.tree)
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment