首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能做些什么来消除这个unsafePerformIO代码中的Reflex.Dom呢?

我能做些什么来消除这个unsafePerformIO代码中的Reflex.Dom呢?
EN

Stack Overflow用户
提问于 2017-05-26 08:02:24
回答 1查看 164关注 0票数 2
代码语言:javascript
复制
main = mainWidget $
  el "div" $ do
    let fileInputConfig = FileInputConfig (constDyn Map.empty)
    fi <- fileInput fileInputConfig

    let uploads   :: Dynamic t [File]            = value fi
    upload        :: Dynamic t (Maybe File)      <- (return . fmap headMay) uploads
    getNameAction :: Dynamic t (Maybe (IO Text)) <- (return . fmap (getNameText <$>)) upload
    filename      :: Dynamic t (Maybe Text)      <- (return . fmap (unsafePerformIO <$>)) getNameAction

    el "div" $ dynText (show <$> filename)
  return ()
  where getNameText :: MonadIO m => File -> m Text
        getNameText = getName

我尽我最大的努力与类型进行连接,但如果不使用unsafePerformIO,我就找不到出路。我认为在这种情况下它是安全的,但显然还有其他类似的事情你可能想做,这是不安全的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-26 08:37:18

对于这种情况,您通常需要performEvent。我手头没有编译器/REPL来提供更多细节,而且函数是隐藏在某些类型类黑客(https://github.com/reflex-frp/reflex/blob/9575a5660334fb8a617da1cd9aa1b522e8e4ddb7/src/Reflex/PerformEvent/Class.hs)后面的,但是它的要点是,如果您有一个带有IO的事件,那么您可以在该事件发生的任何地方运行它。

现在,你有了Dynamic,但你可以

  • 从其中提取事件
  • 也许它不需要是动态的(这是没有意义的,因为您不想查看IO值)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44196562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档