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
を使用せずにパスを見つけることができませんでした。私はこのケースでは安全だと思うが、明らかにあなたがしたいかもしれない他の同様のものが安全ではないだろう。このReflex.DomコードのunsafePerformIOを削除するにはどうすればよいですか?
「動的t(多分IOテキスト)」の外側のレイヤーに 'IO'を入れてバインドする必要があります。 'sequenceA'は、アプリケーションの外部への通勤の一般的な方法です。すなわち、 'sequenceA ::(IO a) - > IO(Maybe a)'のような、 'sequenceA ::(Traversable t、Applicative f)=> t(f a) - > f(t a)'である。しかし、それは '動的なt'が移動可能であることを必要とし、私はそれがあるかどうかわかりません。 – luqui
sequenceAはIOを外部に持っています(つまり私は 'Dynamic t(IO(Maybe Text))'で終わります)。しかし、 'unsafePerformIO 'を使わずに' Dynamic t(Maybe Text) '。 – John
ええ、ダイナミックなものは何ですか、あなたはどのライブラリを使っていますか? – luqui