Haskell 如何将函数应用于流媒体库生成的流中的值
我正在使用Haskell 如何将函数应用于流媒体库生成的流中的值,haskell,streaming,Haskell,Streaming,我正在使用流库生成一个流值,但使用简单函数转换流时遇到问题 有人能给我指一下正确的方向吗 #!/usr/bin/env stack import Streaming import qualified Streaming.Prelude as S import Data.Maybe stream :: Stream (Of (Maybe Integer)) Maybe () stream = S.each [Just 1, Just 2, Just 3, Just 4, Just 5] ma
流
库生成一个流
值,但使用简单函数转换流时遇到问题
有人能给我指一下正确的方向吗
#!/usr/bin/env stack
import Streaming
import qualified Streaming.Prelude as S
import Data.Maybe
stream :: Stream (Of (Maybe Integer)) Maybe ()
stream = S.each [Just 1, Just 2, Just 3, Just 4, Just 5]
main :: IO ()
main = do
print $ S.mapM (\x -> isJust x) stream
print "done"
这就是我得到的错误:
test.hs:13:25: error:
• Couldn't match expected type ‘Maybe b0’ with actual type ‘Bool’
• In the expression: isJust x
In the first argument of ‘S.mapM’, namely ‘(\ x -> isJust x)’
In the second argument of ‘($)’, namely
‘S.mapM (\ x -> isJust x) stream’
|
13 | print $ S.mapM (\x -> isJust x) stream
| ^^^^^^^^
Streaming.Prelude.mapM
具有类型
Monad m => (a -> m b) -> Stream (Of a) m r -> Stream (Of b) m
这就是为什么typechecker希望函数的返回类型是可能是b0
你需要的是
Streaming.Prelude.map :: Monad m => (a -> b) -> Stream (Of a) m r -> Stream (Of b) m r
或者干脆
fmap :: Functor f => (a -> b) -> f a -> f b
请记住,
\x->isJust x
相当于简单地编写isJust
。