任务混合在一个信号中
Task mixed in a signal
我想通过信号向邮箱发送消息。
module Main where
import Graphics.Element exposing (show)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Extra exposing (..)
import Signal
import Model.PickList exposing (pickList)
import Model.BabyName.Debug as Debug
headerPane : Html
headerPane =
header [ id "header" ]
[ text "header" ]
leftPane : Signal Html
leftPane = flip Signal.map (.signal pickList) <| \pl ->
ul []
[ li []
[ fromElement << show <| pl ] ]
mainPane : Html
mainPane =
section [ id "main" ]
[ text "what? what?" ]
layout : Signal Html
layout = flip Signal.map leftPane <| \lp ->
div [ id "wrapper" ] <|
[ headerPane
, lp
, mainPane ]
main : Signal Html
main =
(Signal.send (.address pickList) Debug.dummyList) -- type error
layout
我觉得我需要的只是 haskell 的 >>
。但这些是信号(不是 Monad),没有 do
符号或 >>= \_ ->
种疯狂,我也没有看到 liftTask
。 Elm 中的想法是你需要一个外部输入,并且不能从应用程序的角度任意发送?请帮助我理解。
回答
Elm 0.15 中的任务通过 port
发送来执行。这意味着您的 Task
或 Signal Task
需要在 Main
模块的顶层可用,因为这是您可以声明 port
的唯一位置。这意味着您不能简单地向内联邮箱发送消息(这会产生副作用),您必须确保任务可以通过您的程序流向端口定义。
例子
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Extra exposing (..)
import Signal
import Model.PickList exposing (pickList)
import Model.BabyName.Debug as Debug
headerPane : Html
headerPane =
header [ id "header" ]
[ text "header" ]
leftPane : Signal Html
leftPane = flip Signal.map (.signal pickList) <| \pl ->
ul []
[ li []
[ fromElement << show <| pl ] ]
mainPane : Html
mainPane =
section [ id "main" ]
[ text "what? what?" ]
layout : Signal Html
layout = flip Signal.map leftPane <| \lp ->
div [ id "wrapper" ] <|
[ headerPane
, lp
, mainPane ]
port toPicklist = Signal.send (.address pickList) Debug.dummyList
main : Signal Html
main = layout
资源
我想通过信号向邮箱发送消息。
module Main where
import Graphics.Element exposing (show)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Extra exposing (..)
import Signal
import Model.PickList exposing (pickList)
import Model.BabyName.Debug as Debug
headerPane : Html
headerPane =
header [ id "header" ]
[ text "header" ]
leftPane : Signal Html
leftPane = flip Signal.map (.signal pickList) <| \pl ->
ul []
[ li []
[ fromElement << show <| pl ] ]
mainPane : Html
mainPane =
section [ id "main" ]
[ text "what? what?" ]
layout : Signal Html
layout = flip Signal.map leftPane <| \lp ->
div [ id "wrapper" ] <|
[ headerPane
, lp
, mainPane ]
main : Signal Html
main =
(Signal.send (.address pickList) Debug.dummyList) -- type error
layout
我觉得我需要的只是 haskell 的 >>
。但这些是信号(不是 Monad),没有 do
符号或 >>= \_ ->
种疯狂,我也没有看到 liftTask
。 Elm 中的想法是你需要一个外部输入,并且不能从应用程序的角度任意发送?请帮助我理解。
回答
Elm 0.15 中的任务通过 port
发送来执行。这意味着您的 Task
或 Signal Task
需要在 Main
模块的顶层可用,因为这是您可以声明 port
的唯一位置。这意味着您不能简单地向内联邮箱发送消息(这会产生副作用),您必须确保任务可以通过您的程序流向端口定义。
例子
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Extra exposing (..)
import Signal
import Model.PickList exposing (pickList)
import Model.BabyName.Debug as Debug
headerPane : Html
headerPane =
header [ id "header" ]
[ text "header" ]
leftPane : Signal Html
leftPane = flip Signal.map (.signal pickList) <| \pl ->
ul []
[ li []
[ fromElement << show <| pl ] ]
mainPane : Html
mainPane =
section [ id "main" ]
[ text "what? what?" ]
layout : Signal Html
layout = flip Signal.map leftPane <| \lp ->
div [ id "wrapper" ] <|
[ headerPane
, lp
, mainPane ]
port toPicklist = Signal.send (.address pickList) Debug.dummyList
main : Signal Html
main = layout