Jul. 27th, 2012

stdray: (Default)
Меня преследуют странные мысли о полиморфизме высших порядков (rank-2 и rank-n) и тайпклассах. Мне привиделось, что можназделоть что-то такое на макросах в Nemerle и теперь голова этим забита. То есть какой-то синтаксис, например poly

        def t1 = poly T[_];         // T1 [ T2 ] 
        def t2 = poly T[_  , _];   // T1 [ T2, T3 ] 
        def t3 = poly T[int, _];   // T1 [int, T2] 

по ентой записи делает представление . Примерно как дотнеты хранят как-то информация о generic-параметрах

        WriteLine(typeof(Dictionary.[_,_]));
       //System.Collections.Generic.Dictionary`2[TKey,TValue]
        WriteLine(typeof(Dictionary.[string,int]));
       //System.Collections.Generic.Dictionary`2[System.String,System.Int32]

Так и мне надо изобразить что-то такое. То есть сохранить информацию о типах-параметрах в какую-нибудь свой класс PolyType, а потом применять

        def с1 = t1 apply [List]; // List[T2]
        def r1 = с1 apply [int];  // List[int]

И у apply должен быть тип PolyType -> YobaType, где YobaType - это тип-вариант из PolyType (если у нас все еще слишком неконкретные для дотнета типы) и System.Type (когда тип стал конкретным, надо бы его прямо в код поставить).

И надо сделать такие вот тайпклассы

    typeclass Functor [ poly C[_] ] {
         abstract fmap[a,b](f: a->b, c: C[a]) : C[b];
    }
 

И все это дело будет превращаться в контейнер с квази-циатами. Будут хранится типы-параметры в виде YobaType, будут хранится сигнатуры методов, а также тела методов, если они не объявлены как abstract. И затем можна будет использовать все это дело каким-то макро аттрибутом вроде

    [ instance Functor[List] ]
    module ListF {    }
 

И тогда в ентот модуль ListF будут переписаны, все методы из Functor, сигнатуры будут конкретизированы List. Для методов помеченных abstract в базовом классе будет выдана ошибка с требованием реализовать такой-то метод. Методы, имеющие тела в базовом классе, будут переписаны в дочерний, если в том уже не содержится метод с данным именем и данной сигнатурой. Понавешать атрибутов [instance] на один модуль можно много, потому могут возникать конфликты. На самом деле, это не так серьезно, как может показаться, поскольку Nemerle умеет в перегрузку методов (в отличии от некоторых), потому конфликтовать будут только методы с одинаковой сигнатурой и именем, да и то если они они имеют реализацию в базовых классах. Ну и тут надо, как-то выкрутился, но я пока не понял как. Мне думает, это скорее вопрос соглашений, так как информации достаточно и реализовать-то можно всякое поведение.

И вот пытаюсь сделать что-то такое и до [profile] wizzard0 докопался и до чатика. Пока еще даже не определился, как должны PolyType и YobaType выглядеть. Также мучает вопрос "а не поехал ли я", но тут без разницы, если действительно можназделоть.
stdray: (Default)
Во-первых, зачем они делают асфальтированные подходы к дорогам в местах где нет перехода? Вот тротуар идет параллельно дороге на некотором расстоянии (до нескольких метров может доходить), между ними газон (иногда даже заборчик есть) и... внезапно пошел поворот прямо к дороге. А оно зачем, если там все равно перейти нельзя? Провокация, я щитаю.

Во-вторых, я был в гостях у таких-то малознакомых мне людей. У них есть аквариум здоровый такой, даже поболее моего, наверное. И вот стала эта женщина рыб кормить. Я смотрю, что всем этим рыбам одна мельчайшая пушинка, способная на ластике карандаша уместится, упала и спрашиваю: "Вы их по нескольку раз в день кормите чтоли?". Но нет, дважды в день, как обычно. А дело вот в чем: лето, жара и аквариум зацвел. Вода такая мутная стала, и зеленая ерунда на стенках образовалась. И решили хозяева, что, видимо, они перекармливали, потому теперь не дают рыбам есть, как я понял, уже четвертую неделю. Я попытался рассказать, что рыбы такое дело: вы либо фильтр нормальный купите, либо аквариум мойте. Без особого эффекта. Это они от лени дурачками прикидываются, или реальне думают, что рыбья голодовка очистит воду?

В-третьих, разные умные книги как читать? Читаю я по-немногу этот TAPL, там суть описываемых вещей ясна. Никаких проблем. А как начну делать упражнения, так либо времени очень много потрачу, либо вообще сделать не смогу. Ну и о чем это говорит? Дальше-то читать, или сидеть и делать? Если второе, то "книжки читать" - для меня весьма дорогое занятие. И как у других дела обстоят тоже интересно.

December 2019

S M T W T F S
1234567
891011121314
15161718192021
222324252627 28
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags