1

私はText.Regex.Posixファイルで使用してきましたが、これまでのところすべて正常に動作しています。OverloadedStrings今、私は何か他のものに使用したいと思いますが、同じファイル内にあります。OverloadedString問題は、関連するすべてのコードをアクティブにregexすると、文字列があいまいになるためにコンパイルされないことです。

すべての文字列に型シグネチャを追加したり、非アクティブ化したりすることなく、これに対処する方法はありますOverloadedStringsか?

4

1 に答える 1

3

ここには 2 つのアプローチがあります。いくつかのインポート シャッフルを実行し、次のような一般的ではない型を持つ必要がある関数にエイリアスを設定することができます。

import qualified Text.Regex.Posix as P
import Text.Regex.Posix hiding ((=~))

(=~) :: RegexContext Regex String target => String -> String -> target
(=~) = (P.=~)

その後、ファイル全体でコードを変更する必要はありません。ただし、これは混乱を招く可能性があり、動作する必要がありますFlexibleContexts(大したことではありません)。

または、タイプを指定するための独自の Python のような構文を作成することもできます。

r :: String -> String
r = id

u :: Text -> Text
u = id

b :: ByteString -> ByteString
b = id

example :: Bool
example = r"test" =~ r"te.t"

splitComma :: Text -> Text
splitComma = Data.Text.splitOn (u",")

ただし、これにはさらに多くのコードを編集する必要があります。追加の言語拡張は使用せず、実装するコードは最初の方法と比較しても非常に単純です。また、括弧や$記号をより慎重に使用する必要があることも意味しますが、 ru、およびb関数を関数として使用することもできます。

于 2015-04-23T21:03:11.167 に答える