2017-07-16 4 views
2

私はグラハム・ハットンによってHaskellでプログラミングを読んでいると、それは第13章では、次のコードを示します:構文どこブロック

import Control.Applicative 
import Data.Char 

{- some code omitted -} 

newtype Parser a = P (String -> [(a, String)]) 

item :: Parser Char 
item = P (\ input -> case input of 
        [] -> [] 
        x:xs -> [(x,xs)]) 

three :: Parser (Char,Char) 
three = pure g <*> item <*> item <*> item 
     where g a b c = (a,c) 

私は最後の行

where g a b c = (a,c) 
を理解することに苦労していますが

3行にはParser(Char、Char)というタイプがありますが、gabcは何を表しているのでこの行が存在することを理解していますか?構文はどのように有効ですか?私はケースのような場所を見るのに慣れています

f :: s -> (a,s) 
f x = y 
    where y = ... x ... 

ここで、各記号xとyはwhere宣言の前に現れます。

答えて

9

関数を宣言する構文です。それは

where g = \a b c -> (a,c) 

gと同等の3つの引数を取り、タプルg a b c構文的に有効である方法

2

を返す関数であるのですか?

モジュールのトップレベルの同じ定義が有効と同じ理由で有効です。 whereの定義と最上位レベルの定義の違いは、関数の頭に変数がバインドされていることです(最後の例ではxなど)。これは右側で使用できますが、にはそれら。

関連する問題