# Haskell for Elm developers, Part 8: IO

**URL:** <https://discourse.elm-lang.org/t/haskell-for-elm-developers-part-8-io/10783>\
**Category:** Show and Tell\
**Created:** [June 12, 2026, 2:15pm UTC](https://discourse.elm-lang.org/t/haskell-for-elm-developers-part-8-io/10783 "2026-06-12T14:15:38Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![kvothe](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/kvothe/32/4406_2.png) [@kvothe](https://discourse.elm-lang.org/u/kvothe)\
**Post date:** [June 12, 2026, 2:15pm UTC](https://discourse.elm-lang.org/t/haskell-for-elm-developers-part-8-io/10783/1 "2026-06-12T14:15:38Z")

</div>

New post in my series: turns out IO is just `Task`/`Cmd` wearing a Haskell hat. An IO a is a description of an effect, \>\>= is Task.andThen, and main is the runtime boundary where effects actually run. Also covers the one real difference: no typed error channel (and how IO (Either e a) gets it back).

> **[Haskell for Elm developers: giving names to stuff (Part 8 - IO)](https://flaviocorpa.com/haskell-for-elm-developers-giving-names-to-stuff-part-8-io.html)**
>
> A series of blog posts for explaining Haskell to Elm developers interested in learning the language that powers the compiler for their favourite language!

Feedback welcome! 💜

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex035/uploads/elm_lang/original/1X/50a05e53677a2c3b47776d7abd0f113eb50193a1.png) [@system](https://discourse.elm-lang.org/u/system)\
**Post date:** [June 22, 2026, 2:16pm UTC](https://discourse.elm-lang.org/t/haskell-for-elm-developers-part-8-io/10783/2 "2026-06-22T14:16:36Z")

</div>

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.
