Random Purescript卤素,副作用(随机数)

Random Purescript卤素,副作用(随机数),random,state,purescript,halogen,Random,State,Purescript,Halogen,在PureScript卤素项目中,我希望将状态设置为随机数,但如何提取值?正常的 r <- randomInt 1 10 r您需要在您的组件DSL中使用适当的monad(您当前有e类型var)使之成为可能,然后您可以使用H.fromEff来提升随机数: module Main where import Prelude import Control.Monad.Aff (Aff) import Control.Monad.Eff (Eff) import Control.Monad.Ef

在PureScript卤素项目中,我希望将状态设置为随机数,但如何提取值?正常的

r <- randomInt 1 10

r您需要在您的
组件DSL
中使用适当的monad(您当前有
e
类型var)使之成为可能,然后您可以使用
H.fromEff
来提升
随机数

module Main where

import Prelude
import Control.Monad.Aff (Aff)
import Control.Monad.Eff (Eff)
import Control.Monad.Eff.Random (randomInt, RANDOM)
import Halogen as H
import Halogen.HTML.Events.Indexed as HE
import Halogen.HTML.Indexed as HH
import Halogen.Util (runHalogenAff, awaitBody)

type State = { n::Int }

initialState :: State
initialState = { n: 3}

data Query a = NewRandom a

ui :: forall eff. H.Component { n :: Int } Query (Aff (random :: RANDOM | eff))
ui =
    H.component { render, eval }
    where
    render :: State -> H.ComponentHTML Query
    render state =
        HH.button
            [ HE.onClick $ HE.input_ NewRandom ]
            [ HH.text $ show state.n ]


    eval :: Query ~> H.ComponentDSL State Query (Aff (random :: RANDOM | eff))
    eval (NewRandom next) = do
        r <- H.fromEff $ randomInt 1 10
        H.modify (\state -> state { n=r } )
        pure next

main :: forall eff. Eff (H.HalogenEffects (random :: RANDOM | eff)) Unit
main =
    runHalogenAff do
    body <- awaitBody
    H.runUI ui initialState body
modulemain其中
进口序曲
进口控制单体Aff(Aff)
进口控制.Monad.Eff(Eff)
导入控制.Monad.Eff.Random(randomInt,Random)
进口卤素作为氢
导入卤素.HTML.Events.Indexed作为
导入卤素.HTML.index作为HH
导入卤素.Util(runHalogenAff,body)
类型状态={n::Int}
initialState::State
initialState={n:3}
数据查询a=NewRandom a
ui::forall eff。H.组件{n::Int}查询(Aff(random::random | eff))
用户界面=
H.component{render,eval}
哪里
render::State->H.ComponentHTML查询
呈现状态=
按钮
[HE.onClick$HE.input\uuNewRandom]
[HH.text$show state.n]
eval::Query~>H.ComponentDSL状态查询(Aff(random::random | eff))
eval(NewRandom next)=do
r状态{n=r})
纯下一个
main::forall eff。Eff(H.HalogeneEffects(random::random | Eff))单位
主要=
鲁恩哈洛根夫酒店
身体
module Main where

import Prelude
import Control.Monad.Aff (Aff)
import Control.Monad.Eff (Eff)
import Control.Monad.Eff.Random (randomInt, RANDOM)
import Halogen as H
import Halogen.HTML.Events.Indexed as HE
import Halogen.HTML.Indexed as HH
import Halogen.Util (runHalogenAff, awaitBody)

type State = { n::Int }

initialState :: State
initialState = { n: 3}

data Query a = NewRandom a

ui :: forall eff. H.Component { n :: Int } Query (Aff (random :: RANDOM | eff))
ui =
    H.component { render, eval }
    where
    render :: State -> H.ComponentHTML Query
    render state =
        HH.button
            [ HE.onClick $ HE.input_ NewRandom ]
            [ HH.text $ show state.n ]


    eval :: Query ~> H.ComponentDSL State Query (Aff (random :: RANDOM | eff))
    eval (NewRandom next) = do
        r <- H.fromEff $ randomInt 1 10
        H.modify (\state -> state { n=r } )
        pure next

main :: forall eff. Eff (H.HalogenEffects (random :: RANDOM | eff)) Unit
main =
    runHalogenAff do
    body <- awaitBody
    H.runUI ui initialState body