In Haskell, how can I replace an ASCII character sub-string in a ByteString?
Asked Answered
D

2

5

In Haskell, how can I replace an ASCII character sub-string in a ByteString? How can I use function replace in Data.ByteString.Search using character strings as arguments? Are there other ways to perform sub-string replacement in a ByteString? For example, would it make sense to convert the ByteString to a String, perform the string substitution using the String, and then convert the result back to a ByteString?

Dragone answered 24/2, 2014 at 14:52 Comment(0)
F
6

The string must be converted into a ByteString using pack.

If the string is a string literal, you can use the OverloadedStrings extension. This will convert automatically the string literal into a ByteString.

Firebreak answered 24/2, 2014 at 15:0 Comment(2)
Do you mean I must first convert the string arguments to ByteString objects before I pass them to replace? How do I generate the replacement string argument (the second argument) to replace? The type of this argument must be an instance of Substitution.Dragone
Yes, you have to convert the string arguments into ByteString objects, and ByteString is an instance of the typeclass Substitution, so it is suitable as the second argument of replace.Firebreak
D
2

Example to illustrate Teetoo's answer:

Prelude> :module + Data.ByteString.Char8 Data.ByteString.Search
Prelude Data.ByteString.Char8 Data.ByteString.Search> replace (pack "World") (pack "Derek") (pack "Hello, World!")
"Hello, Derek!"
Prelude Data.ByteString.Char8 Data.ByteString.Search>
Dragone answered 25/2, 2014 at 1:46 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.