簡體   English   中英

Haskells堆棧或交互正在添加字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM