Haskell Language stringhe

Esempio

Il tipo di letterale

Senza estensioni, il tipo di stringa letterale, ad esempio qualcosa tra virgolette, è solo una stringa, ovvero un elenco di caratteri:

Prelude> :t "foo"
"foo" :: [Char]

Tuttavia, quando l'estensione OverloadedStrings è abilitata, i valori letterali stringa diventano polimorfici, simili ai numeri letterali :

Prelude> :set -XOverloadedStrings
Prelude> :t "foo"
"foo" :: Data.String.IsString t => t

Questo ci consente di definire i valori dei tipi di stringhe senza necessità di conversioni esplicite. In sostanza, l'estensione OverloadedStrings fromString ogni stringa letterale nella funzione di conversione generica fromString , quindi se il contesto richiede ad esempio il Text più efficiente invece di String , non devi preoccuparti di te stesso.

Utilizzo di stringhe letterali

{-# LANGUAGE OverloadedStrings #-}

import Data.Text (Text, pack)
import Data.ByteString (ByteString, pack)


withString :: String
withString = "Hello String"

-- The following two examples are only allowed with OverloadedStrings

withText :: Text
withText = "Hello Text"      -- instead of: withText = Data.Text.pack "Hello Text"

withBS :: ByteString
withBS = "Hello ByteString"  -- instead of: withBS = Data.ByteString.pack "Hello ByteString"

Si noti come siamo stati in grado di costruire valori di Text e ByteString nello stesso modo in cui costruiamo valori ordinari di String (o [Char] ), piuttosto che utilizzare ciascuna funzione del pack tipi per codificare esplicitamente la stringa.

Per ulteriori informazioni sull'estensione di lingua OverloadedStrings , consultare la documentazione relativa all'estensione .