Representable
- это функторы типа контейнеров, которые имеют «особые отношения» с другим типом, который служит индексом в Representable
. В определении Haskell этот тип индекса задается связанным семейством типов type Rep f :: *
Для каждого значения индекса и для каждого значения значения [113 ], мы можем вызвать функцию index :: f a -> Rep f -> a
, чтобы получить соответствующий элемент. И tabulate :: (Rep f -> a) -> f a
создает контейнер, в котором каждый элемент получен из своего собственного индекса.
Теперь, вот пример функтора, который НЕ представим: типичный тип списка Haskell []
. Можно наивно думать, что он может быть проиндексирован чем-то вроде Natural
, но проблема в том, что списки могут быть пустыми или не иметь достаточного количества элементов для достижения заданного индекса.
Всегда бесконечный тип, такой как data Stream a = Stream a (Stream a)
- это Representable
и он индексируется Natural
, потому что всегда будет значение для любого заданного Natural
, которое мы передадим в index
.
Аналогично, однородная пара data Pair a = Pair a a
индексируется по типу Bool
: индекс сообщает нам, какой из компонентов выбрать.
Если мы получим зависимую переменную, векторы фиксированного размера будут Representable
и проиндексированы конечными натуральными числами , ограниченными размером вектора. Они не индексируются неограниченными Natural
сами, потому что тогда у нас может быть доступ за пределы!
Чтение различных экземпляров, определенных для Representable
, поучительно, но, похоже, мы имеем перейти к исходному коду, потому что связанные типы не видны в пикше. Некоторые интересные особенности:
Функтор Identity
индексируется по типу блока ()
, это имеет смысл, потому что Identity
имеет, так сказать, только один «слот», поэтому мы не нужно предоставлять никакой информации.
Тип «функции из некоторого типа» ((->) e)
индексируется самим типом источника. И index
это просто id
. Это то, что подразумевается под «изоморфной монаде читателя», потому что монада Reader e
является просто новым типом над ((->) e)
.
Composition
(вложенность) двух представимых функторов снова Representable
, и они индексируются парой исходных индексов! Это имеет смысл: сначала мы должны знать, как индексировать во внешний функтор, а затем во внутренний.
Product
(спаривание) двух Representable
функторов индексируется суммой (Either
) исходных индексов. Ветвь Either
говорит нам, в какую часть продукта индексировать.
Заметное упущение (потому что это не так в общем случае): нет (Representable f, Representable g) => Representable (Sum f g)
экземпляра.
На Linux я часто использую завихрение с - главный параметр. Это доступно для нескольких операционных систем, включая Windows.
[редактирование] имело отношение к ответу ниже, gknw.net в настоящее время снижается с 23 февраля 2012. Проверьте curl.haxx.se на обновленную информацию.
Я загрузил бы PuTTY и выполнил бы сессию telnet на порте 80 к веб-серверу, который Вы хотите
HEAD /resource HTTP/1.1
Host: www.example.com
Вы могли альтернативно загрузить Perl и попробовать команду HEAD LWP. Или запишите свой собственный сценарий.
Существует порт Win32 wget, который работает прилично.
1) См. заголовки, которые возвращаются из запроса GET
wget --server-response -O /dev/null http://....
1a) Сохраняют заголовки, возвращаемые из запроса GET
wget --server-response -o headers -O /dev/null http://....
2) См. заголовки которые возвращаются из запроса GET HEAD
wget --server-response --spider http://....
2a) Сохраняют заголовки, которые возвращаются из запроса GET HEAD
wget --server-response --spider -o headers http://....