GHCI
を使用すると、これを把握できます。
GHCI
には、let recipe = (== "000001")
を入れます。今、それがどのように機能するかを見ることができます。タイプが何であるか見るには:t recipe
を試してください。それはrecipe :: [Char] -> Bool
を返すので、これはChar
(String
)のリストをとり、を返す関数のようです。
テストすると、"000001"
以外の入力に対してはFalse
が返されます。
==
は演算子なので、1つの引数に部分的に適用でき、もう一方の引数をとり、結果を返す関数を返します。したがって、ここで== "000001"
は、==
の反対側を埋めるために1つの引数をとり、その結果を返す関数を返します。
編集:定義がrecipe = ((==) "000001")
の場合、この説明は正しいと思われます。
これを理解するには、partial applicationを検索する必要があります。 ==
関数の型はa -> a -> Bool
であり、同じ型の2つの引数をとり、Bool
を返す関数です。
a -> (a -> Bool)
の関数でもあり、タイプa
の1つの引数をとり、a -> Bool
の新しい関数を返します。それがここで起こっていることです。 1つの引数を==
に指定しました。このため、この特定のケースでは、タイプa -> Bool
または[Char] -> Bool
の新しい関数が返されました。
'この質問は次回誰かがGoogleの検索結果になるでしょう。「Haskell(==「いいえ、それはできません。Googleは "Haskell(=="はグーグル "Haskell"と同じです)を検索して句読点を無視します。これは検索の際に何も役に立たなかった理由を説明しています – sepp2k
文字列の等価性をチェックしています。 >レシピ "000001"と返すとTrueが返されます –
@ sepp2k興味深いのは...私はGoogleにこのようなことをどのように説明できますか? – CodyBugstein