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