66: Getting Haskell Unit 4 Lessons 21 - JSToElm
All Episodes

66: Getting Haskell Unit 4 Lessons 21

We are getting to apply all that theory we went over into commandline examples, building on what we've learned brick by brick. It's getting pretty exciting to actually understand most of what's going on!

Haskell IO

Doing the exercises

  • Haskell read, let’s us take a String IO and read out a Double
  • 2 value assignments in the where clause, but got an error til the spacing lined up?

    • unit-4/pizzaCost.hs:15:32: error: parse error on input ‘=’ Perhaps you need a ‘let’ in a ‘do’ block? e.g. ‘let x = 5’ instead of ‘x = 5’

Do Notation

  • a member of the type class Monad

  • Maybe is also a member of Monad

  • I always try to spell pizza with an ‘e’ instead of an ‘a’. lol

  • do-notation as a convenient way to perform IO actions in Haskell

  • It’s important to contextualize this statement with where and when. We are 1/2 half into a getting started book for Haskell. Is this a complete definition of do-notation ? Most certainly not. Is it the most complete, and comprehensive? not likely, remember I’m just getting started, a novice.

    • The point is, when it comes to teaching or conveying your ideas, there is a point of diminishing returns for how much information you give the student.
    • Too little, and they’ll be confused and incomplete
    • Too much, and you’ll overwhelm them, and you guessed it confuse them.
    • Richard Feldman’s Teaching Elm. What you leave out is just as important as what you talk about. What gets the student to their goal directly? NOT what is the most complete and comprehensive explanation. These are fundamentally different goals.
    • Is the goal to get it working? or to understand it on a deeply theoretical level? That will help to guide and weight just how much to give.


  • IO is a specialized parametrized type

  • It’s purpose is to isolate the messy outside world of Side Effects from the pure reasonable logic of our Haskell program.

  • do-notation allows us to write Haskell as if we weren’t stuck in IO, it’s context contains the side effects for us, and won’t let it escape.

  • Questions Left Open

    • Map.Map Int Double as a Type signature
    • Map.fromList [(1, 20.0), (2, 15.0)] What am I looking at for a return ?
  • I guess we could do an entire episode on Map ?

  • Next up Lazy I/O !!!!


Get Programming With Haskell

Richard’s Elm Conf 2017, Teaching Elm to Beginners

Get Haskell Example Repo


Published 17 Jan 2019

A show about learning Elm, Functional Programing, and generally leveling up as a JS developer.
JavaScript To Elm on Twitter