- это вывод типа Haskell в действии, или что-то еще?

Я работаю через онлайн Книга (ссылка приведет вас прямо к разделу, что мой вопросы вопросов).

Автор определяет тип данных бинарного дерева, и показывает, как его можно сделать экземпляр складного типа (определено в Data.foldable) путем реализации функции складки:

import Data.Monoid
import qualified Data.Foldable as F

data Tree a = Empty | Node a (Tree a) (Tree a) deriving (Show, Read, Eq)

instance F.Foldable Tree where  
  foldMap f Empty = mempty  
  foldMap f (Node x l r) = F.foldMap f l `mappend`  
                           f x           `mappend`  
                           F.foldMap f r 

Декларация типа Foldmap выглядит следующим образом:

F.foldMap :: (Monoid m, F.Foldable t) => (a -> m) -> t a -> m

Так что требуется функция, которая принимает экземпляр типа «A» и возвращает моноид.

Теперь, в качестве примера, автор создает экземпляр дерева

    testTree = Node 5  
                 (Node 3  
                    (Node 1 Empty Empty)  
                    (Node 6 Empty Empty)  
                 )  
                 (Node 9  
                    (Node 8 Empty Empty)  
                    (Node 10 Empty Empty)  
                 )  

и выполняет следующую складку (определено для складываемых типов):

F.foldl (+) 0 testTree -- the answer is 42 (sum of the Node Integers)

Мой вопрос в том, как Haskell определяется, что дополнение к целочисленному типу - Запрос Haskell Для типа TestTree дает дерево [целое число] - можно рассматривать как моноидную работу (если моя терминология верна)?

(Моя собственная попытка ответа: автор Несколько абзацев до этого раздела описывает, как тип NUM можно интерпретировать в виде моноида в виде двух разных способов; путем упаковки Их в SUM и Продукт Тип Тип с (+) и (*) как MapPend функции и 0 и 1 в качестве MEMPTY Элемент соответственно. Тип «A» в ( дерева a) как-то выводится в том, что принадлежат к типу , типа (способ, которым Haskell по-прежнему интерпретирует числовые значения в соответствии с контекстом) Или это что-то другое полностью?]

8
задан Aky 8 September 2011 в 01:31
поделиться