Haskell打印字符串标准输出

时间:2013-11-28 06:37:37

标签: haskell output user-input

我需要在powerset中打印元素。现在我的代码输出是这样的:

"a"
"ab"
"b"
"x"
"xy"
"xyz"
"xz"
"y"
"yz"
"z"

但是,我需要输出没有引号,如下所示:

a
ab
b
x
xy
xyz
xz
y
yz
z

这就是我所拥有的。如何解决它才能获得正确的输出?

import Data.List
powerset = foldr (\x acc -> acc ++ map (x:) acc) [[]]

main = do
    numCases <- getLine
    repl $ (read numCases :: Int)

repl num = do
    if(num == 0) then return ()
    else do
        size <- getLine
        input <- getLine
        let ret = tail $ sort $ powerset input
        mapM (\x -> print x) ret
        repl $ num-1

1 个答案:

答案 0 :(得分:6)

首先(\x -> f x)相当于普通f(在几乎所有情况下)通过eta-reduction。因此,您可以将mapM (\x -> print x)重新写为mapM print

要删除引号,您应使用函数putStrLn而不是print函数。 print中的引号来自print = putStrLn . showshow是一个函数,它以一种可以(如果定义了合适的实例)的方式打印出值read。因此,字符串上的引号,您不希望(或需要)用于您的用例。