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