2017-02-02 8 views
1

こんにちは私はエルムの新作です。現在の時間を取得し、それをエルムの日付に変換することにいくつかの問題があります。Convert Time.now to Date - Elm

メッセージタイプ - メッセージとモデルに新しいメッセージを追加する機能があります。私はメッセージとテキストとユーザーIDと共に投稿された時間を保存しようとしています。

私はこのエラーを取得しておくしかし -

The argument to function `fromTime` is causing a mismatch. 

59|    Date.fromTime (currentTime Time.now) 
          ^^^^^^^^^^^^^^^^^^^^ 
Function `fromTime` is expecting the argument to be: 

Time 

But it is: 

x -> Time -> Time 

Hint: It looks like a function needs 2 more arguments. 

ここでは、コード

type alias Message = 
    { text : String, 
     date : Date, 
     userId : Int 
    } 

currentTime : task -> x -> Time -> Time 
currentTime _ _ time = 
    time 

newMessage : String -> Int -> Message 
newMessage message id = 
    { text = message 
    , date = Date.fromTime (currentTime Time.now) 
    , userId = id 
    } 

は、私は本当に何が起こっているかを把握することはできませんです。どんな助けでも大歓迎です。ありがとう。

答えて

3

Elmは関数呼び出しが確定的である純粋な言語です。現在の時刻を要求するのは少し複雑です。なぜなら、私たちが呼び出すことのできる機能がないため、時刻に応じて異なる時刻を返すからです。同じ入力を持つ関数呼び出しは、常に同じものを返します。

現在の時刻を取得することは、副作用の土地にあります。我々は、純粋な方法で時間を私たちに与えるようアーキテクチャに頼む必要があります。 Elmの対応方法はTaskProgramの機能です。 ファンクションのCmdを使用してTaskをElmアーキテクチャに送信します。 Elm Architectureは、現時点を取得するためにシーンの裏側で独自のことを行い、次にupdate関数への別の呼び出しで純粋なコードで応答します。

http://elm-lang.org/tryに貼り付けることができる簡単な例です。ボタンをクリックすると、現在の時刻がDateに変換されています。

import Html exposing (..) 
import Html.Events exposing (onClick) 
import Time exposing (..) 
import Date 
import Task 

main = 
    Html.program 
     { init = { message = "Click the button to see the time" } ! [] 
     , view = view 
     , update = update 
     , subscriptions = \_ -> Sub.none 
     } 

type alias Model = { message: String } 

view model = 
    div [] 
    [ button [ onClick FetchTime ] [ text "Fetch the current time" ] 
    , div [] [ text model.message ] 
    ] 


type Msg 
    = FetchTime 
    | Now Time 


update msg model = 
    case msg of 
    FetchTime -> 
     model ! [ Task.perform Now Time.now ] 

    Now t -> 
     { model | message = "The date is now " ++ (toString (Date.fromTime t)) } ! [] 

あなたはジャバスクリプトに精通している場合、Nowメッセージの目的は緩く、それが提供する引数は、エルム・アーキテクチャにより送信された時点で、コールバック関数、と考えることができます。

+0

良い説明!どうもありがとう。 –