6

まあ言ってみれば

  flip :: (a->b->c) ->b->a->c
  const ::d->e->d

(flip const) の型は

  a=d,b=e,c=d

  b->a->c

タイプは

  e->d->d

しかし、(地図を取る)その

  [Int]->[[a]]->[[a]]

だから、これがどのようにghciを計算したのか理解できませんでした。[[a]]->[[a]] を理解しましたが、なぜ、どのように [Int] ですか?

編集: たとえば、ghci で記述した場合

  :t flip const 


it would return b->c->c

そしてghciは私がしたようにそれを計算します。

しかし

 map :: (a->b)->[a]->[b]
 take :: Int->[c]->[c]

では、なぜマップテイクなのか

  [Int]->[[a]->[a]]

なぜ [Int] ghci はそれをどのように計算したのか

4

2 に答える 2

14

同じ分析をしましょう:

map :: (a -> b) -> [a] -> [b]

take :: Int -> [x] -> [x]

しかし、それは実際に意味します

take :: Int -> ([x] -> [x])

それでa=Intb=([x] -> [x]) あなたは得る

map take :: [Int] -> [ [x] -> [x] ]

リスト機能一覧!

于 2013-05-19T18:08:46.877 に答える
12

表示されたタイプを質問に再入力するのではなく、コピーして貼り付ける必要があります。理由は、あなたの見方が間違っているからです。のタイプmap takeは次のとおりです。

map take :: [Int] -> [[a] -> [a]]

つまり、統合は次のように機能します。

:t map
map :: (a -> b) -> [a] -> [b]
:t take
take :: Int -> [c] -> [c]

takeそのため、最初の引数として適用すると andmapが得られます(これは関数であることに注意してください)。型でこれらの置換を実行し、最初の引数を適用します。a ~ Intb ~ [c] -> [c]map

map take :: [a] -> [b]        (for some specific 'a' and 'b')
-- recall a ~ Int
map take :: [Int] -> [b]      (for some specific 'b')
-- recall b ~ [c] -> [c]
map take :: [Int] -> [[c] -> [c]]

ええ、map takeまさにあなたが期待するものです。Int のリストを操作し、リストの先頭からいくつかの要素を取得する関数のリストを生成する関数。

于 2013-05-19T18:11:42.847 に答える