簡體   English   中英

組成不同類型的流

[英]Composing streamly streams of different types

具體根據streamly教程 ,也能夠使用不同的流組合<>運算符( 再出口Semigroupstreamly )所示:

runStream $ ((readLn :: IO Int) |: nil) <> ((readLn :: IO Int) |: nil) & S.mapM print

但是,我想合並具有不同類型的流,但兩者都可以與print 像這樣:

runStream $ ((readLn :: IO Int) |: nil) <> ((readLn :: IO [Char]) |: nil) & S.mapM print

但這給我一個錯誤:

<interactive>:27:45: error:
    • Couldn't match type ‘[Char]’ with ‘Int’
      Expected type: SerialT IO Int
        Actual type: SerialT IO [Char]
    • In the second argument of ‘(<>)’, namely
        ‘((readLn :: IO [Char]) |: nil)’
      In the first argument of ‘(&)’, namely
        ‘((readLn :: IO Int) |: nil) <> ((readLn :: IO [Char]) |: nil)’
      In the second argument of ‘($)’, namely
        ‘((readLn :: IO Int) |: nil) <> ((readLn :: IO [Char]) |: nil)
           & S.mapM print’

關於如何執行此操作的任何提示?


上面的代碼已經在ghci運行,這些是導入的:

import Streamly
import Streamly.Prelude ((|:), nil)
import qualified Streamly.Prelude as S
import Data.Function ((&))

由於S.mapM僅適用於已經是monad的對象,因此大概可以將它們轉換為共享類型(例如,包含String的類型),然后遍歷共享流類型。 print只是putStrLn . show putStrLn . show ,所以:

runStream $ (show <$> ((readLn :: IO Int) |: nil)) <> (show <$> ((readLn :: IO [Char]) |: nil)) & S.mapM putStrLn

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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