Skip to content

Instantly share code, notes, and snippets.

@jinjor
Created July 28, 2016 16:18
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jinjor/bf37f10713028a1d9ef547724bcf5532 to your computer and use it in GitHub Desktop.
Save jinjor/bf37f10713028a1d9ef547724bcf5532 to your computer and use it in GitHub Desktop.
import Html exposing (..)
import Html.App exposing (..)
import Html.Events exposing (..)
import Json.Decode exposing (Decoder, customDecoder, string)
main =
beginnerProgram { model = English, view = view, update = update }
{-| Currently supported languages. -}
type Language
= English
| Japanese
{-| A JSON decoder of Language. -}
languageDecoder : Decoder Language
languageDecoder =
customDecoder targetValue fromStringLanguage
fromStringLanguage : String -> Result String Language
fromStringLanguage str =
case str of
"English" -> Ok English
"Japanese" -> Ok Japanese
other -> Err ("Invalid language: " ++ other)
-- MODEL
type alias Model = Language
-- UPDATE
type Msg
= Change Language
update : Msg -> Model -> Model
update msg model =
case msg of
Change language -> language
-- VIEW
view : Model -> Html Msg
view model =
Html.form []
[ select [ on "change" <| Json.Decode.map Change languageDecoder ]
(List.map (viewOption model) ["English", "Japanese"])
, text (toString model)
]
viewOption : Model -> String -> Html Msg
viewOption model s =
option [] [ text s ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment