サーチ…


備考

整数リテラル

小数点のない数字です

例えば0142 、...

Num型のクラスの一部であるfromInteger暗黙的に適用されるので、実際にNum a => a型を持ちます。つまり、 Numインスタンスである任意の型を持つことができます


分数リテラル

小数点付き数字であります

たとえば、 0.0-0.1111 、...

は、 Fractional型のクラスの一部であるfromRational暗黙的に適用されるため、実際にはa => a型を持ちます。つまり、 Fractionalインスタンスである任意の型を持つことができます


文字列リテラル

GHCに言語拡張OverloadedStringsを追加した場合、 Stringに対しても同じことができます。 fromStringは、 Data.String.IsString型クラスからfromString適用されfromString

これは、 StringTextまたはByteStringに置き換えるためによく使用されます。


リストリテラル

リストは[1, 2, 3]リテラル構文で定義できます。 GHC 7.8以降では、これを使用して、 OverloadedLists拡張子を持つ他のリスト様構造を定義することもできます。

デフォルトでは、 []の型は次のとおりです。

> :t []
[] :: [t]

OverloadedLists 、次のようになります。

[] :: GHC.Exts.IsList l => l

整数

リテラルの型

Prelude> :t 1
1 :: Num a => a

注釈付きの具体的な型を選択する

ターゲットタイプが注釈付きの Numである限り、タイプを指定できます。

Prelude> 1 :: Int
1
it :: Int
Prelude> 1 :: Double
1.0
it :: Double
Prelude> 1 :: Word
1
it :: Word

コンパイラが不平を言うならば

Prelude> 1 :: String

<interactive>:
    No instance for (Num String) arising from the literal `1'
    In the expression: 1 :: String
    In an equation for `it': it = 1 :: String

浮動小数値

リテラルの型

Prelude> :t 1.0
1.0 :: Fractional a => a

注釈付きの具体的な型の選択

型の注釈を使用して型を指定できます。唯一の要件は、型がFractionalインスタンスを持たなければならないということです。

Prelude> 1.0 :: Double
1.0
it :: Double
Prelude> 1.0 :: Data.Ratio.Ratio Int
1 % 1
it :: GHC.Real.Ratio Int 

コンパイラが不平を言うならば

Prelude> 1.0 :: Int
<interactive>:
    No instance for (Fractional Int) arising from the literal `1.0'
    In the expression: 1.0 :: Int
    In an equation for `it': it = 1.0 :: Int

文字列

リテラルの型

拡張子がなければ、文字列リテラルの型 - つまり二重引用符間の何か - は単なる文字列、別名文字のリストです:

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

ただし、 OverloadedStrings拡張機能を有効にすると、文字列リテラルは数値リテラルに似多態性になります

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

これにより、明示的な変換を必要とせずに文字列型の値を定義することができます。本質的に、 OverloadedStrings拡張は、すべての文字列リテラルを包括的なfromString変換関数にラップするだけです。したがって、 String代わりにより効率的なText要求される場合は、心配する必要はありません。

文字列リテラルの使用

{-# 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"

文字列を明示的にエンコードするために各型pack関数を使用するのではなく、通常のString (または[Char] )値を構築するのと同じ方法で、 TextおよびByteString値を構築する方法に注目してください。

OverloadedStrings言語拡張の詳細については、拡張機能のドキュメントを参照してください。

リストリテラル

GHCのOverloadedLists拡張では、リストリテラル構文を使用してリストに似たデータ構造を構築できます。

これにより、 Data.Mapは次のようになります。

> :set -XOverloadedLists
> import qualified Data.Map as M
> M.lookup "foo" [("foo", 1), ("bar", 2)]
Just 1

これの代わりに(余分なM.fromListの使用に注意してください):

> import Data.Map as M
> M.lookup "foo" (M.fromList [("foo", 1), ("bar", 2)])
Just 1


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow