Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import System.Random
- import Control.Monad.State
- -- given a [Int] add random numbers to it
- a :: [Int]
- a = [3, 1, 6, 7, 9]
- myFunc :: Int -> State StdGen Int
- myFunc x = do
- gen <- get
- let (y, gen2) = randomR (100,200) gen
- put gen2
- return $ y + x
- myFunc2 :: Int -> State StdGen (Maybe Int)
- myFunc2 0 = return Nothing
- myFunc2 x = do
- gen <- get
- let (y, gen2) = randomR (100,200) gen
- put gen2
- return $ Just $ y*x
- myFunc3 :: Int -> State StdGen (Maybe Int)
- myFunc3 0 = return Nothing
- myFunc3 x = do
- gen <- get
- let (y, gen2) = randomR (100,200) gen
- put gen2
- return $ Just $ y*x + 2
- myConnector :: Maybe Int -> State StdGen (Maybe Int)
- myConnector Nothing = return Nothing
- myConnector (Just x) = myFunc3 x
- x :: State StdGen [Int]
- x = (sequenceA $ myFunc <$> a)
- y :: [Int] -> State StdGen [Maybe Int]
- y = (\x -> sequenceA $ myFunc2 <$> x )
- z :: [Maybe Int] -> State StdGen ([Maybe Int])
- z = (\x -> sequenceA $ myConnector <$> x)
- g = evalState (x >>= (z <=< y )) (mkStdGen 4567)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement