在haskell中拆分使用和不使用fmap的输入读取的行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在haskell中拆分使用和不使用fmap的输入读取的行相关的知识,希望对你有一定的参考价值。
我发现words
是分裂String
的合适功能:
words :: String -> [String]
使fmap
有什么特别之处:
Prelude> fmap words getLine
abc def ghi
["abc","def","ghi"]
并且它的遗漏会导致错误:
Prelude> words getLine
<interactive>:10:7: error:
• Couldn't match type ‘IO String’ with ‘[Char]’
Expected type: String
Actual type: IO String
• In the first argument of ‘words’, namely ‘getLine’
In the expression: words getLine
In an equation for ‘it’: it = words getLine
我知道fmap
与Functors
合作,但我还不知道Functors
。它与此有关吗?
答案
getLine
返回一个IO String
,所以words getLine
是一个类型错误。 fmap
有类型
Functor f => (a -> b) -> f a -> f b
和IO
有一个仿函数实例,所以fmap
为IO
有类型(a -> b) -> IO a -> IO b
。 fmap words
因此具有IO String -> IO [String]
类型,并将其应用于getLine
的结果导致IO [String]
。
在ghci中,执行IO
动作并打印结果,这就是您显示结果列表的原因。
以上是关于在haskell中拆分使用和不使用fmap的输入读取的行的主要内容,如果未能解决你的问题,请参考以下文章
使用 SSIS OR T-SQL 将一列带引号和不带引号的逗号分隔值拆分为多列