?

Log in

No account? Create an account

Заповедник репрессивной психиатрии

То, чем я счас занимаюсь,
metaclass
в норме должно было бы заставить мое руководство на обоих работах задуматься, "а не отправить ли меня за счет фирмы в санаторий мозги полечить".

Встраиваю в клиент к БД (который стоит примерно на паре-тройке сотен рабочих мест у нескольких десятков клиентов) экспорт текущего открытого отчета в формат хаскелевого модуля, с автоматическим объявлением типа. Чтобы можно было дальше это обработать в хаскеле, а то меня обычные тестовые примеры типа списка в пару элементов кортежей из двух полей, вгоняют в уныние и совершенно не отражают реальные производственные задачи.

Наркоманы
metaclass
Все таки в хаскеле кое-где проглядывают следы неадеквата, от которого не спасает даже система типов.
Вот например, если в исходнике написать десятичный литерал, типа 1.5, то для того, чтобы он нормально скомпилировался в некий тип данных, нужно чтобы этот тип был инстансом Fractional. А Fractional - это класс чисел поддерживающих деление, что, по моему, к десятичным литералам относится весьма слабо.
Вот, к примеру, нужно мне хранить эквивалент SQL типа NUMERIC(M,N). Я использую Data.Decimal, но записать оный Data.Decimal в нормальном виде в исходнике не получается, т.к. инстансом Fractional он не является, потому что операция деления в нем реализована весьма хитро и не совместима с (/). В принципе достаточно реализовать fromRational, но там свои заморочки, например, 1.5::Rational - это 3%2, что к Decimal как бэ не сразу и преобразуешь.

PS: Дурь я эту временно обошел, методом записи в явном виде: Decimal N (число*(10^N) где N - точность числа.

Адъ кодировок в хаскеле
metaclass
import Data.Encoding
import Data.Encoding.CP1251
import Data.Encoding.CP866
import qualified Data.ByteString as B

test1251 = B.writeFile "test1251" $ encodeStrictByteString CP1251 "жопий"
test866 = B.writeFile "test866" $ encodeStrictByteString CP866 "жопий"

Чтобы заставить оное заработать, пришлось по цепочке поставить encoding-0.6.2 зависящий от extensible-exceptions-0.1.1.0 и HaXml-1.20, который, в свою очередь, зависит от polyparse-1.4.

При этом гугл, скотина, первой ссылкой возвращает encoding-0.4.1, который под GHC 6.10.2 не собирается. Пока я заметил что собираю не последнюю версию, я успел при помощи лома и такой-то матери заставить собраться старую.

В общем, "ничего сложного", для того, чтобы заставить контору: а) закрыться в муках б) искать высокооплачиваемых спецов с кандитатской степенью в CS d) переписывать годами все на дотнете - подойдет идеально.