任务混合在一个信号中

时间:2015-06-01 00:47:58

标签: signals frp elm

我想用邮件内联邮箱发送邮件。

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的>>。但这些是信号(不是Monads),没有do符号或>>= \_ ->类型的疯狂,我也没有看到liftTask。想法是在Elm中你需要一个外部输入,并且不能从应用程序的角度任意发送吗?请帮我理解。

1 个答案:

答案 0 :(得分:1)

答案

Elm 0.15中的任务是通过port发送的。这意味着您的TaskSignal Task需要在Main模块的顶层提供,因为这是您宣布{{1}的唯一地方}}。这意味着您不能简单地将消息发送到邮箱内(这会产生副作用),您必须确保任务可以通过您的程序流向端口定义。

实施例

port

资源