2017-03-10 11 views
2

これは私が書いた簡単なプログラムです。putStrLn関数のドル記号の使用

import System.Environment 
import System.IO 

main = do 
    (fileName1:_) <- getArgs 
    contents <- readFile fileName1 
    let myList = lines contents 
     totalLines = length myList 
    putStrLn $ "Total lines in the files are " ++ show (totalLines) ++ " lines" 

最後の行でドル記号を削除した場合、Haskellはエラーがあると告げる。誰でもドル記号(または括弧)の有無にかかわらず何が起こっているかを私に説明してもらえますか?

おかげ

答えて

3

$は、その左側に機能する権利に値を渡し演算子です。ここではそれが実現しています方法は次のとおりです。

f $ x = f x 

あなたの例では、++事業者は$関数が取るとに渡す文字列で、その結果、最初に適用されますように、それは、非常に低い演算子の優先順位を持っているのでそれは便利ですputStrLn。あなたの例では$なし

、Haskellはこの順番で行を評価しようとします:

(putStrLn "Total lines in the files are ") ++ show (totalLines) ++ " lines" 

だから、最初の文字列を印刷しようとし、その後putStrLnの結果を取り、他とそれを連結します文字列は、putStrLnが文字列を返さないためにエラーになります。

関連する問題