Haskell重载字符串
示例
通常,Haskell中的字符串文字的类型为String(这是的类型别名[Char])。尽管对于较小的教育计划而言这不是问题,但现实世界中的应用程序通常需要更高效的存储,例如Text或ByteString。
OverloadedStrings只需将文字类型更改为
"test" :: Data.String.IsString a => a
允许将它们直接传递给期望这种类型的函数。许多库针对其类似字符串的类型实现此接口,包括Data.Text和Data.ByteString,它们都提供了超过时的空间和空间优势[Char]。
还有一些独特的用法,OverloadedStrings例如Postgresql-simple库中的用法,该用法允许SQL查询以双引号(如普通字符串)的形式编写,但提供了防止不当串联(一种众所周知的SQL注入攻击源)的保护措施。
要创建IsString该类的实例,您需要隐含该fromString函数。范例†:
data Foo = A | B | Other String deriving Show instance IsString Foo where fromString "A" = A fromString "B" = B fromString xs = Other xs tests :: [ Foo ] tests = [ "A", "B", "Testing" ]
†此示例由LyndonMaydwell(sordina在GitHub上)提供,位于此处。