Haskell, типизированный Map.Map, LYAH - PullRequest
0 голосов
/ 30 апреля 2018

Я не совсем понимаю часть Map.Map. Я понимаю, что когда я импортирую квалифицированный как Map, мне нужно добавить префикс к нему как «Map». но если за этим обычно следует функция (например, «поиск»), здесь используются два типа.

import qualified Data.Map as Map 
phonebook :: Map.Map String String

Я получаю, что телефонная книга принимает строку и строку, но есть ли в Map.Map указание на то, что это список ассоциаций, или есть что-то еще? А почему стрелки опущены?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

phonebook имеет тип Map String String (если вы должны были импортировать с import Data.Map (Map)). То есть это отображение от Strings до Strings.

В более общем смысле конструктор типа Map можно записать как Map key value, где key и value можно рассматривать как аргументы типа , которые еще предстоит применить . Следовательно, мы говорим, что Map имеет вид * -> * -> *, где сами звезды являются конкретными типами.

Так что в ...

import qualified Data.Map as Map 

phonebook :: Map.Map String String   -- passing "arguments" to Map here
phonebook = undefined

Ты phonebook имеет вид *.

0 голосов
/ 30 апреля 2018

Data.Map экспортирует тип с именем Map:

data Map k a

чье определение скрыто. Квалифицированный импорт означает, что для ссылки на этот тип вам необходимо добавить к нему имя, которое вы вставили после as. Так что Map.Map это просто имя конечного конструктора типа карты.

Map.Map String String

- это просто тип конечных отображений из строк в строки.

...