我使用以下函数生成GUID:
import Data.UUID as UV
import Data.UUID.V1 as UV1
generateUUID :: String
generateUUID = UV.toString $ fromJust $ unsafePerformIO UV1.nextUUID
Run Code Online (Sandbox Code Playgroud)
我用它generateUUID来创建元素
createWidgetUI element uuid =
WidgetUI { wui_title = ""
, wui_id = uuid
, wui_attr_style = ""
, wui_attr_class = ""
, wui_styles = []
, wui_scripts = []
, wui_contents = []
, wui_children = []
, wui_element = element
}
wuiPanel :: UI WidgetUI
wuiPanel = do
return $ createWidgetUI elem uuid
where
uuid = generateUUID
elem = ContainerUI $ H.div
Run Code Online (Sandbox Code Playgroud)
当我wuiPanel多次调用该方法时,我得到相同的UUID值!但我需要每次调用方法wuiPanel来获取具有不同UUID值的元素.我无法理解如何实现它.
我建议你重新修改UUID代,以便它适合UI你正在使用的monad.unsafe一般情况下最好避免使用 - 特别是在像你这样的情况下,你使用它们来欺骗编译器:类似String承诺value是一个固定的常量字符串值,允许编译器优化假设.这将使代码非常非常脆弱,因为它可能起作用或不起作用,具体取决于优化.
在下面的代码中,我猜几种类型,因此这与您的库完全不匹配.
generateUUID :: IO String
generateUUID = UV.toString . fromJust <$> UV1.nextUUID
wuiPanel :: UI WidgetUI
wuiPanel = do
uuid <- liftIO generateUUID
let elem = ContainerUI $ H.div
return $ createWidgetUI elem uuid
Run Code Online (Sandbox Code Playgroud)
要做的事情:更好地处理nextUUID,Nothing如果你太快请求UUID ,可能会返回"(文档中可怕的引用).你确定你不能使用V4.nextRandom永远不会返回Nothing的吗?
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |