在榆樹什麼是採取我的模型和實現toString函數的正確方法?在榆樹什麼是實現我自己的正確方法toString
我正在尋找的類型將是toString : Model -> String
,我可以使類型爲toStr : Model -> String
類似的功能,但我想我會想要該函數被稱爲toString
。
示例程序(硬幣兌換卡塔):
module CoinChanger where
import Html exposing (..)
import StartApp.Simple as StartApp
import Signal exposing (Address)
import Html.Attributes exposing (..)
import Html.Events exposing (on, targetValue)
import String
---- MAIN ----
main =
StartApp.start
{
model = emptyModel
,update = update
,view = view
}
---- Model ----
type alias Model =
{
change : List Int
}
emptyModel : Model
emptyModel =
{
change = []
}
---- VIEW ----
toStr : Model -> String
toStr model =
model.change
|> List.map (\coin -> (toString coin) ++ "¢")
|> String.join ", "
view : Address String -> Model -> Html
view address model =
div []
[
input
[
placeholder "amount to make change for"
, on "input" targetValue (Signal.message address)
, autofocus True
-- style
]
[]
, div []
[
text (toStr model)
]
]
---- UPDATE ----
changeFor : Int -> List Int
changeFor amount =
[ 25, 10, 5, 1 ]
|> List.foldl
(\coin (change, amount)
-> (change ++ List.repeat (amount // coin) coin
, amount % coin)
)
([], amount)
|> fst
update : String -> Model -> Model
update change model =
{ model | change =
case String.toInt change of
Ok amount
-> changeFor amount
Err msg
-> []
}
我認爲正確的方式做,這將是調用函數toString
,但給了我下面的錯誤由編譯器:
檢測到1個模塊中的錯誤。 - TYPE MISMATCH --------------------------------------------- - CoinChanger.elm
toString
的類型註釋與其定義不匹配。42│的toString:型號 - >字符串 ^^^^^^^^^^^^^^^類型註釋說:
{ change : List Int } -> String
但我推斷,該定義有此類型:
{ change : List { change : List Int } } -> String
重命名功能toStr
(或東西不叫toString
)修復該問題,但似乎是錯誤的。什麼是正確的方法來做到這一點?
我將第45行更改爲'|> List.map(\ coin - >(Basics.toString coin)++「¢」)'並且所有工作都像您說的一樣工作。謝謝! –