this post was submitted on 12 Apr 2024
364 points (96.0% liked)

linuxmemes

20880 readers
7 users here now

I use Arch btw


Sister communities:

Community rules

  1. Follow the site-wide rules and code of conduct
  2. Be civil
  3. Post Linux-related content
  4. No recent reposts

Please report posts and comments that break these rules!

founded 1 year ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 24 points 7 months ago (1 children)

I feel the same way about Haskell. Every program I've used is either a "Look at what else Haskell can do!" example, or an endorsement of universal packages whenever I have to update 200 haskell modules.

[–] PoolloverNathan 6 points 7 months ago (1 children)

↑ This. Haskell makes it super easy to get good CLI filters. All you need to do is interact and process the string it gives you. You'll automatically get streaming behavior because of laziness without lifting a finger.

[–] [email protected] 2 points 7 months ago (1 children)

Huh. My brain is on fire right now.

[–] PoolloverNathan 3 points 7 months ago (1 children)

interact is (String → String) → IO (), a function that takes a String → String (a function that takes a string and returns a string) and returns an I/O operation (which is a separate type since Haskell doesn't have side-effects). The function you give it will receive all of stdin as a string and its output will be stdout. The magic comes because Haskell uses cons-lists that are lazy in their spine — the list doesn't actually exist until you look at it. This means that, from your perspective (probably not how this is actually implemented), the list you return is iterated character-by-character, and each character that gets printed only waits for the characters it needs, allowing the rest of the stdin list to remain unevaluated.

[–] [email protected] 5 points 7 months ago* (last edited 7 months ago)

Huh. My brain is on fire right now.