ѕєχυαℓ ρσℓутσρє

I fuck numbers.

  • 18 Posts
  • 332 Comments
Joined 1 year ago
cake
Cake day: June 21st, 2023

help-circle

















  • You’re pretty much right on the money. In Haskell, a String is a type synonym for [Char], so we can use the list concatenation function ++ to join strings. ++ is an infix function i.e. [1,2,3] ++ [3,4,5] = [1,2,3,3,4,5] (which will be equivalent to doing (++) [1,2,3] [3,4,5] by virtue of how infix functions work in Haskell). When we do (++ "a"), we create a partially applied function. Now, we can supply another string to it and it will add "a" at the end of it.

    iterate f x produces a lazily evaluated sequence [x, f x, f f x, ...]. So, to get the nth entry, we can do wine !! n where we use another infix function !!. With partial application, we can modify the definition of wine to create a function that takes an Int n and spits out the nth entry of it by doing

    wine = (!!) $ iterate (++" Is Not an Emulator") "WINE"
    

    We needed to wrap the !! inside parentheses because it’s an infix function. $ just changes the order of application. (IIRC, it’s the least significant function.) You can think that we’re wrapping whatever’s on the right of the $ by parentheses. Now we can do wine 2 instead of wine !! 2 to get "WINE Is Not an Emulator Is Not an Emulator".

    I’m by no means a Haskell expert. (I’m not even a professional programmer lol.) So, if someone would like to add some more details, they’re more than welcome.

    Edit: A much more readable version might be

    wine 0 = "WINE"
    wine n = wine (n-1) ++ " Is Not an Emulator"