Haskell隐式String多态

sev*_*evo 3 polymorphism haskell

如何减少编写需要在不同字符串表示之间进行转换的脚本的工作量?

例如,如何创建一个多态的环境,让getContentsputStrLn不需要额外的"胶水代码",使用功能,如一个下面(源自Network.HTTP.Types)?

pathElementsFromUri :: B.ByteString -> [T.Text]
Run Code Online (Sandbox Code Playgroud)

如何利用区域设置来完全避免I/O转换?

完整的示例,其中需要正确的命名空间来执行简单的操作.Haskell的新手不会在第一次尝试时得到这样的东西.

import Network.HTTP.Types
import Data.Foldable
import qualified Data.ByteString as B
import qualified Data.Text.IO as T

main = B.getContents >>= printout

printout = traverse_ T.putStrLn . pathElements
pathElements = fst . decodePath . extractPath
Run Code Online (Sandbox Code Playgroud)

Eri*_*ikR 5

我会查看string-conversions包.

有一个完全多态的convertString函数可以转换为任何主要的字符串类型.此外,具有较少的多态性to...from...功能.

例如

bs :: ByteString
bs = ...

txt :: Text
txt = ...

putStrLn $ convertString bs <> convertString txt
Run Code Online (Sandbox Code Playgroud)