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

linuxmemes

21263 readers
1035 users here now

Hint: :q!


Sister communities:


Community rules (click to expand)

1. Follow the site-wide rules

2. Be civil
  • Understand the difference between a joke and an insult.
  • Do not harrass or attack members of the community for any reason.
  • Leave remarks of "peasantry" to the PCMR community. If you dislike an OS/service/application, attack the thing you dislike, not the individuals who use it. Some people may not have a choice.
  • Bigotry will not be tolerated.
  • These rules are somewhat loosened when the subject is a public figure. Still, do not attack their person or incite harrassment.
  • 3. Post Linux-related content
  • Including Unix and BSD.
  • Non-Linux content is acceptable as long as it makes a reference to Linux. For example, the poorly made mockery of sudo in Windows.
  • No porn. Even if you watch it on a Linux machine.
  • 4. No recent reposts
  • Everybody uses Arch btw, can't quit Vim, and wants to interject for a moment. You can stop now.

  • 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
    [–] PoolloverNathan@programming.dev 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.

    [–] StephenTallentyre@lemmy.today 2 points 7 months ago (1 children)

    Huh. My brain is on fire right now.

    [–] PoolloverNathan@programming.dev 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.

    [–] StephenTallentyre@lemmy.today 5 points 7 months ago* (last edited 7 months ago)

    Huh. My brain is on fire right now.