metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-08-01 11:22 am

Репозиторий функций

Насмотрелся я на разные мавены, рубигемы и прочие репозитории в которых Адъ и Израиль и подумал, что идея искать пакеты по именам - это зло. Пакеты надо искать по исполняемым функциям. А сами функции требуемые описывать в виде структурных типов. И чтобы они грузились сразу из исходного кода, а не из pom.xml, project.clj и gemfile.
Пишешь типа в исходнике
f :: HTTPSUrl->Maybe DataStream
f = broughtBySpidersAndCynocephalus
и оно тебе при загрузке программы все такие места проверяет и скачивает реализующую нужную функцию куски пакетов со всеми зависимостями. :)

[identity profile] metaclass.livejournal.com 2013-08-01 08:37 am (UTC)(link)
Типы гарантируют что функция делает именно то что надо :)
А вот типы сами по себе придется проектировать централизованно.

[identity profile] kkirsanov.livejournal.com 2013-08-01 09:01 am (UTC)(link)
>>Типы гарантируют что функция делает именно то что надо
Не а.
Вместо классического "авторы дебилы - кто же так функцию называет" будет "авторы дебилы, кто же в такие типы данные запихивает"

Хочу я функцию, которая строку в число переводит: http://www.haskell.org/hoogle/?hoogle=String-%3E+Int А там Ад, Израиль и throwSocketError

[identity profile] metaclass.livejournal.com 2013-08-01 09:16 am (UTC)(link)
Там только одна подходит: read :: Read a => String -> a

[identity profile] thedeemon.livejournal.com 2013-08-01 08:54 pm (UTC)(link)
Тут про число не сказано, слишком общая какая-то. Впрочем, в этом вашем хаскеле даже константа 4 слишком общая, не Int.

[identity profile] nicka-startcev.livejournal.com 2013-08-01 06:20 pm (UTC)(link)
a+b, a-b, a+0.12345*b -- они одного типа.

[identity profile] metaclass.livejournal.com 2013-08-01 08:12 pm (UTC)(link)
Разного :) И еще в типы можно включать размерность.
Кроме того, тривиальные функции обычно в либы нету смысла выносить.

[identity profile] nicka-startcev.livejournal.com 2013-08-01 08:33 pm (UTC)(link)
как это разного? все они возвращают ровно то, что на входе, да еще и число аргументов одинаковое. В общем, от их перепутывания формальные проверки типов не спасут.

[identity profile] nealar.livejournal.com 2013-08-02 06:09 am (UTC)(link)
a+b и a+0.12345*b , как минимум, разного типа.
Первое работает с любыми числами, а второе - только с дробными.

[identity profile] nicka-startcev.livejournal.com 2013-08-02 06:29 am (UTC)(link)
>а второе - только с дробными.

не обязательно, кстати. Во многих языках достаточно развесистая система "привидений типов".

a+0.12345*b может внутре считаться так:

float tmpf = b;
tmpf = tmp*0.12345;
int tmpi = tmpf;
return a+tmpi;

[identity profile] nicka-startcev.livejournal.com 2013-08-01 08:34 pm (UTC)(link)
ну и про тривиальность -- можно и понавороченнее понавертеть. не этом суть. Какое-нибудь там положение кончика левой/правой ноги/руки в зависимости от набора углов -- углы те же, а положение другое.