Types 在Elm中使用数字作为类型
我正在学习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
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