iammmai
iammmai

Reputation: 1

Create list from input using interact in Haskell

I'm starting out with Haskell and was looking into I/O mechanims. I read up on the interact function which takes a function of type String -> String as parameter. I tried to write a simple program that takes to numbers from stdin and creates a list and prints it line by line.

import Data.List

readIn = sort . map read . words 
writeOut = unlines . map show
rangeList [n,m] = [n .. m] 
main = interact (writeOut . rangeList . readIn)

For some reason it wont print the numbers. Could you help me out?

Upvotes: 0

Views: 245

Answers (1)

bradrn
bradrn

Reputation: 8467

interact requires you to input an end-of-file (EOF) to stdin with Ctrl+D (or Ctrl+Z on Windows); when I type that combination, the output appears as required. This is necessary because, as the documentation for interact states, ‘the entire input from the standard input device is passed to [interact] as its argument’; due to this, you need to explicitly signal the place where stdin ends.

(By the way, I’m not even sure how you got your program to compile; GHC gives me lots of ‘ambiguous type’ errors when I try. I had to add type signatures to get it working, at which point I found the solution above to work.)

Upvotes: 1

Related Questions