在Haskell中将字符串和整数写入stdout

时间:2015-01-10 20:54:18

标签: haskell

我是Haskell的新手,我想知道如何在Haskell中打印一些函数返回的字符串和整数值,就像我们在C ++中一样。

#include <iostream>
using namespace std;

int solve(int a) {
  return a * a;
}

int main() {
  int cases, number;
  cin >> cases;

  for (int cs = 1; cs <= cases; cs++) {
    cin  >> number; 
    cout << "Case " << cs << ": " << solve(number) << endl;
  }

  return 0;
}

我在Haskell中尝试过类似但没有运气并且收到错误。

solve :: Int -> Integer
solve = …

main = do
  n <- readLn
  forM_ [1..n] (\i -> do
    m <- readLn
    printf "Case %d: %d" i (solve m))

1 个答案:

答案 0 :(得分:3)

使用forM_ [1..n::Int]让编译器知道n所需的类型。否则,readLn没有足够的信息来进行类型检查。

main :: IO ()
main = do
    n <- readLn
    forM_ [1..n::Int] (\i -> do
        m <- readLn
        printf "Case %d: %d\n" i (solve m))
当你不需要它的花哨功能(例如printf或更复杂的格式字符串)时,

%04d在Haskell中并没有这么用。更惯用的方式可能是

main :: IO ()
main = do
    n <- readLn
    forM_ [1..n::Int] (\i -> do
        m <- readLn
        putStrLn $ "Case " ++ show i ++ ": " ++ show (solve m)

函数show几乎可以将任何内容转换为字符串。