September 21st, 2012

with Cat The Cat

Продолжение темы про литералы в типах (доступно в ghc 7.6.2).

Вот тут подробности: http://hackage.haskell.org/trac/ghc/wiki/TypeNats/Basics

Что из этого можно вывести? А вот, что.

data Field (s :: Symbol) = Field String deriving (Show)

field :: Sing (s :: Symbol) -> Field (s :: Symbol)
field s = Field (fromSing s)

field (Sing "qq") с типом Field "qq" будет отличаться типом от field (Sing "haha") (тип Field "haha"). Их случайно не перепутать.

Понятно, что к таким типам применимы практически все интересные вещи, например, можно задать типы в БД:

type instance FieldType (Field "qq") = Varchar 20 -- здесь другой литерал, целое число.

Помимо Field, можно сделать и Table. К Table подцепить HList полей (с проверкой на отсутствие дубликатов, например) и мы получили описание БД с понятными именами, но без применения магии Template Haskell.
with Cat The Cat

Youtube.

Это у меня одного определяемая скриптом Youtube скорость докачки видео меньше скорости проигрывания оного?

Постоянно залипает, а поскольку Youtube убрала возможность скачать весь ролик, то смотреть совсем невозможно.