gpt4 book ai didi

haskell - 我该怎么做才能消除这个 Reflex.Dom 代码中的 unsafePerformIO?

转载 作者:行者123 更新时间:2023-12-01 12:20:48 26 4
gpt4 key购买 nike

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 我找不到出路.我认为在这种情况下它是安全的,但显然还有其他类似的事情你可能想做但不安全。

最佳答案

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

现在,您已获得 Dynamic , 但是你可以

  • 从中提取事件
  • 也许它不需要是动态的(它没有意义,因为你不想偷看 IO 值)
  • 关于haskell - 我该怎么做才能消除这个 Reflex.Dom 代码中的 unsafePerformIO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44196562/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com