[Haskell-cafe] Function Returning Type?
Thomas Davie
tom.davie at gmail.com
Thu May 21 16:15:08 EDT 2009
Op 21 May 2009, om 21:52 heeft Stefan Holdermans het volgende
geschreven:
> Jochem,
>
>>>> rationals n = (putStr . unlines . map show) (take n (nub [x % y |
>>>> y <-
>>>> [1..], x <- [1..y], x < y]))
>
>>> rationals n :: Integer -> [Ratio]
>
>> I meant "Integer -> String" obviously.
>
> Er... what about
>
> rationals :: Int -> IO ()
Of note here though, the original type Integer -> String is more
desirable – the Int/Integer part doesn't matter so much, what matters
is the IO type – we can no longer pass the value that rationals
generates into another function, because it printed it and dumped it.
Lets fix the function instead:
rationals :: Int -> [Rational]
rationals n = take n $ nub [x % y | y <- [1..], x <- 1..], x < y]
showLines :: Show a => [a] -> String
showLines = unlines . map show
rationalsS :: Int -> String
rationalsS = showLines . rationals
Now we can chose to use the actual rationals we got out of the
function, we can chose to use the string we get back, we can reuse our
function for showing multiple showable values, and we can print any of
these if we chose :).
Bob
More information about the Haskell-Cafe
mailing list