mcm*_*yer 2 string text haskell
我正在搜索unlines函数的反函数Data.String.Combinators,unlines通过追加换行来连接行:
unlines :: (Monoid s, IsString s) => [s] -> s
unlines应该是倒数lines,它在换行符上拆分一个类似字符串的对象:
lines :: IsString s => s -> [s]
在广泛的搜索hoogle和hayoo,也变化split,splitOn等返回任何内容.函数的命名unlines甚至暗示了它的逆的存在lines.所有Data.String,Data.Text,Data.ByteString等有lines作用,但没有通用的实现似乎存在.
让我感到奇怪的是,这样的功能不应该存在.这有什么根本原因吗?
背景:由于String仍然被广泛使用,即使每个人(?)都知道它几乎不应该在所有情况下,我认为String->String用IsString s => s -> s或替换我自己的,类似的函数会更好(IsString s, Monoid s) => s -> s.这样至少我不会偏向于偏向,String同时仍然允许String易用性.
现在,我很清楚IsString,仅提供类型的类型fromString对于这样的lines功能是不够的.所以问题变成:需要什么属性以及什么类型类型,如果有的话,"封装"它们?
IsString a只有从提供了一个转换String到a.lines一般来说,这使得写一个有意义的不可行.
例如,这是一个微不足道的案例.
data T = T
instance IsString T where
fromString _ = T
instance Monoid T where
mempty = T
mappend _ _ = T
Run Code Online (Sandbox Code Playgroud)
我们无法真正定义lines :: T -> [T]:该函数唯一可能的(非底部)结果是一个[T,T,T,...,T]几乎没用的形式列表,因为它与输入完全无关fromString.
如果可能的话,我建议使用更丰富的类型来允许一个lines函数.