Last active
July 27, 2024 09:23
-
-
Save JoelQ/c93a8f6a81262ff12c93ab2ff859f8e5 to your computer and use it in GitHub Desktop.
Turn an Elm random generator into task, allowing it to be chained with other side effects.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- 0.19 | |
randomToTask : Generator a -> Task x a | |
randomToTask generator = | |
Time.now | |
|> Task.map (Tuple.first << Random.step generator << Random.initialSeed << Time.posixToMillis) | |
-- 0.18 | |
randomToTask : Generator a -> Task x a | |
randomToTask generator = | |
Time.now | |
|> Task.map (Tuple.first << Random.step generator << Random.initialSeed << round) | |
The original version I had up was for Elm 0.18. I've updated the gist with your modified version, labelling it as 0.19 compatible.
Thanks for your answer. I'm aware of the effect on randomness.
I searched for a way to combine Cmd
s. The use case need both a Uuid
(Generator
) and the current Posix
(Task
). There is no Cmd#andThen
but there is Task#andThen
. This snippet is the closest solution I found so far while it's not ideal.
Interesting discussion regarding cmd chaining
https://gist.github.com/alpacaaa/13335246234042395813d97af029b10f
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@andys8 because it uses the current time as a seed, the random value more guessable than it otherwise would be (note that regardless of seed value,
Random
is not cryptographically secure).I think it's fine to use this but personally haven't found a need for it. I've never had to combine randomness with other side effects like HTTP requests.