GHCi :sprint command

The :sprint The s stands for “simple,” the idea being that :sprint is in some sense a simplified version of the :print command, since :sprint does less work. command in GHCi prints a value without forcing any evaluation. This is useful for experimenting to find out which parts of a data structure are evaluated.

In this example, first we define a list from a to z. Initially, none of it has been evaluated, so when we :sprint it, all we see is _.

λ> x = ['a' .. 'z']

λ> :sprint x

If we do something that causes part of the list to be evaluated (like looking at the element at index 2), then :sprint now gives us the part of the list that has been evaluated so far.

λ> x !! 2

λ> :sprint x
x = 'a' : 'b' : 'c' : _

And so on.

λ> x !! 5

λ> :sprint x
x = 'a' : 'b' : 'c' : 'd' : 'e' : 'f' : _

Taking the length of a list is a common way to accidentally force evaluation of the entire thing.

λ> length x

λ> :sprint x
x = "abcdefghijklmnopqrstuvwxyz"

Join Type Classes for courses and projects to get you started and make you an expert in FP with Haskell.