GHCi から次の応答が返される理由がわかりません。Maybe
コンストラクタ関数ではありませんか?
Prelude> :t Maybe
<interactive>:1:1: Not in scope: data constructor `Maybe'
Prelude> let e = Maybe 5
<interactive>:1:9: Not in scope: data constructor `Maybe'
Maybe
は型コンストラクタであり、その 2 つの可能なデータ コンストラクタはNothing
とJust
です。だからあなたはJust 5
代わりに言う必要がありMaybe 5
ます .
> let x = Just 5
> x
Just 5
> let y = Nothing
> y
Nothing
> :type x
x :: Maybe Integer
> :type y
y :: Maybe a
> :info Maybe
data Maybe a = Nothing | Just a -- Defined in Data.Maybe
instance Eq a => Eq (Maybe a) -- Defined in Data.Maybe
instance Monad Maybe -- Defined in Data.Maybe
instance Functor Maybe -- Defined in Data.Maybe
instance Ord a => Ord (Maybe a) -- Defined in Data.Maybe
instance Read a => Read (Maybe a) -- Defined in GHC.Read
instance Show a => Show (Maybe a) -- Defined in GHC.Show
Maybe
は、新しい型を構築するために使用されるため (結果の型はa
inの型に依存しますMaybe a
) 、型Maybe Int
コンストラクターa
です。Just a
およびは、特定の型Nothing
のインスタンスを構築するために使用されるため、データ コンストラクターです。たとえば、 のインスタンスを作成します。Maybe
Just Int
Maybe Int
もう 1 つの大きな違いは、パターン マッチングではデータ コンストラクターしか使用できないことです。あなたは言うことができません:
case foo of
Maybe a -> ...
あなたは言う必要があります:
case foo of
Just a -> ...
Nothing -> ...
Maybe
型名です。その型のコンストラクターはJust
andであるため、 Maybe 型のNothing
実際の値Just 5
は(戻りたい値がある場合) またはNothing
(空の場合) のいずれかの形式になります。