[英]Haskells stack or interact are adding characters
我正在使用Haskell做我的第一步。 我使用stack
創建了一個項目,並將Main.hs更改為
module Main where
my_fkt :: String -> String
my_fkt input = show (length input)
main :: IO ()
main = interact my_fkt
我通過stack build
構建項目,通過stack exec firststeps-exe
運行它,輸入“ abcd”並通過<CTRL>-D
完成輸入。 在控制台中,我現在看到
abcd4%
%
被倒置。 如果我使用包含“ abcd”的文本文件(不帶換行符)並執行more sample.txt | stack exec firststeps-exe
我看到的more sample.txt | stack exec firststeps-exe
abcd5%
為什么在第二種情況下我又得到一個附加字符,什么是反向百分號?
這是因為interact的定義使用putStr
而不是putStrLn
。
您可以在此處查看源代碼。
interact :: (String -> String) -> IO () interact f = do s <- getContents putStr (fs)
為了解決您的問題,我將繼續創建類似的功能
interact' :: (String -> String) -> IO ()
interact' f = do s <- getContents
putStrLn (f s)
或者如果您想將其混合並編寫一些簡短代碼
interact' f = putStrLn =<< (f <$> getContents)
我不知道%
是什么或為什么顯示它,我的猜測是它是轉義的CTRL-D
。
關於您關於第二個“不存在”字符的第二個問題,我也不確定,但是我的猜測是這是\\EOF
。
順便說一句。 您可以隨時使用more testinput | wc -c
檢查more testinput | wc -c
more testinput | wc -c
它應產生與haskell程序相同的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.