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" ]

此示例由Lyndon Maydwell(sordina在GitHub上)提供,位于此处。