module Main exposing (main) import Browser import Random import Html exposing (Html, button, div, p, text) import Html.Attributes exposing (disabled, hidden) import Html.Events exposing (onClick) import GenderFriends exposing (altBlumBlumShub, getPolygenderWithLength, renderPolygender) constant a b = a main = Browser.element { init = init , update = update , subscriptions = constant Sub.none , view = view } type Model = AwaitingSeed | Ready Int {- seed -} Int {- regeneration count -} type Msg = SetSeed Int | Regenerate init : () -> (Model, Cmd Msg) init _ = (AwaitingSeed, Random.generate SetSeed (Random.int 2147483648 4294967296)) update : Msg -> Model -> (Model, Cmd Msg) update msg model = let newModel = case msg of SetSeed seed -> Ready seed 0 Regenerate -> case model of AwaitingSeed -> AwaitingSeed Ready oldSeed regenCount -> Ready (altBlumBlumShub oldSeed) (regenCount + 1) in (newModel, Cmd.none) viewStr : Model -> String viewStr model = case model of AwaitingSeed -> "...loading..." Ready seed regenCount -> let (gender, newSeed) = getPolygenderWithLength regenCount seed genderStr = if regenCount == 75 then "queer platonic partners" else renderPolygender gender in "do u think a ouppy and a kittys could be " ++ genderStr ++ ",,?" view : Model -> Html Msg view model = div [] [ p [] [ text (viewStr model) ] , button ( case model of AwaitingSeed -> [] Ready _ 75 -> [disabled True, hidden True] Ready _ _ -> [onClick Regenerate] ) [ text "make it gayer" ] ]