And I thought I have found and read all the relevant documents before posting :-)
Thanks, that makes total sense. Martin On Tuesday, 22 November 2016 17:33:45 UTC+1, Janis Voigtländer wrote: > > Particularly the last two paragraphs. > > Am 22.11.2016 um 17:32 schrieb Janis Voigtländer <[email protected] > <javascript:>>: > > Have you seen what is written at the following location? > > > https://github.com/elm-lang/core/blob/master/CONTRIBUTING.md#adding-new-functions > > <https://github.com/elm-lang/core/blob/master/CONTRIBUTING.md#adding-new-functions:> > > > Am 22.11.2016 um 17:21 schrieb Martin Cerny <[email protected] > <javascript:>>: > > Hi all, > I am currently about 3 side projects (small games) deep in Elm and the > experience has been overally very good. I however encountered a few simple > things I missed in the core libraries, so I would like to ask, if there is > a reason to not have them there. If not, I'll be happy to file a pull > request with them :-) > > So here they are, in order of decreasing importance (IMHO) > > 1) List.get : Int -> List a -> Maybe a > Just a way to get the nth element of a linked list in O(n) time. (the > signature mimics that of Array.get). I know this exists in > http://package.elm-lang.org/packages/circuithub/elm-list-extra/3.10.0/List-Extra > > but seems important enough to have it in the core. > > 2) Random.constant : a -> Generator a > A generator that is not really a generator, but returns a fixed value. > This is useful for composing generators with Random.map and Random.andThen > or for the base case of recursive generators. An example use case is if I > want to pick a value that is zero 50% percent of the time and 1-5 otherwise > (happened in my game a few times) > This one is already present in > http://package.elm-lang.org/packages/mgold/elm-random-pcg/latest/Random-Pcg > which, according to https://github.com/elm-lang/core/issues/724 should > replace the core Random in the future, but why not add it now :-) > > generateValue : Bool -> Generator Float > generateValue isZero = > if isZero then Random.constant 0 else Random.float 1 5 > > > Random.bool |> Random.andThen generateValue > > it also lets you write things like (which is probably not a very common > use case, but came in handy for me): > > listOfGeneratorsToGeneratorOfList : List (Random.Generator a) -> > Random.Generator (List a) > listOfGeneratorsToGeneratorOfList listOfGenerators = > case listOfGenerators of > head :: tail -> > Random.andThen > (listOfGeneratorsToGeneratorOfList tail) > (\list -> Random.map (\x -> x :: list) head) > > [] -> > Random.constant [] > > currently, you can declare constant generator like this, but it seems > stupid and wasteful: > > constant : a -> Random.Generator a > constant value = > Random.map (\_ -> value) Random.bool > > 3) Random.permutation : List a -> Generator (List a) > This would simply pick a permutation of the original list at random. Might > make sense to write this in javascript via converstion to array, as the > O(n) algorithm (Knuth shuffle) for this does not seem to translate well > into pure functional world... I currently do not see a purely functional > implementation that is not O(n^2), but I'll be happy to be proven wrong :-) > > I understand that it is important to keep the core library slim > (especially until dead code elimination is brought to Elm), so which of > those you think should make the cut? > > Looking forward to your ideas > Martin Černý > > -- > You received this message because you are subscribed to the Google Groups > "Elm Discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] <javascript:>. > For more options, visit https://groups.google.com/d/optout. > > -- You received this message because you are subscribed to the Google Groups "Elm Discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
