Types 在Elm中使用数字作为类型

Types 在Elm中使用数字作为类型,types,elm,Types,Elm,我正在学习elm,并尝试使用类型更好地描述我的领域。但我被困在这里:我不能使用数字文字作为类型/类型别名?有没有一种“榆树般的方法”可以做到这一点 module Main exposing (main) import Browser import Html exposing (Html, button, div, text) import Html.Events exposing (onClick) type alias Model = { pos : Int } type Up

我正在学习elm,并尝试使用类型更好地描述我的领域。但我被困在这里:我不能使用数字文字作为类型/类型别名?有没有一种“榆树般的方法”可以做到这一点

module Main exposing (main)

import Browser
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)


type alias Model =
    { pos : Int }

type Up = 1
type Down = -1
type Direction = Up | Down

type Msg
    = Go Direction


initialModel : Model
initialModel =
    { pos = 0 }


update : Msg -> Model -> Model
update msg model =
    case msg of
        Go Up ->
            { model | pos = model.pos + Up }

        Go Down ->
            { model | pos = model.pos + Down }


view : Model -> Html Msg
view model =
    div []
        [ button [ onClick Go Up ] [ text "+1" ]
        , div [] [ text <| String.fromInt model.count ]
        , button [ onClick Go Down ] [ text "-1" ]
        ]


main : Program () Model Msg
main =
    Browser.sandbox
        { init = initialModel
        , view = view
        , update = update
        }

模块主显示(主)
导入浏览器
导入Html(Html、按钮、div、文本)
导入Html.Events(onClick)
类型别名模型=
{pos:Int}
类型Up=1
键入Down=-1
类型方向=向上|向下
输入味精
=前进方向
初始模型:模型
初始模型=
{pos=0}
更新:Msg->Model->Model
更新msg模型=
味精案例
上升->
{model | pos=model.pos+Up}
下降->
{model | pos=model.pos+Down}
查看:模型->Html消息
视图模型=
分区[]
[按钮[点击向上][文本“+1”]

,div[][text为了将
Up
Down
与运算符
+
一起使用,它们必须是值,而不是类型–与其他操作数类型相同的值。因此,将它们定义为
Int
类型的常量:

up : Int
up = 1

down : Int
down = -1
然后,您可以将
更新
函数编写为:

update : Msg -> Model -> Model
update msg model =
    case msg of
        Go Up ->
            { model | pos = model.pos + up }

        Go Down ->
            { model | pos = model.pos + down }
有关完整的工作代码,请参阅。 我唯一做的另一个更改是对按钮的
onClick
——它必须是
onClick