![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Все таки в хаскеле кое-где проглядывают следы неадеквата, от которого не спасает даже система типов.
Вот например, если в исходнике написать десятичный литерал, типа 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 - точность числа.
Вот например, если в исходнике написать десятичный литерал, типа 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 - точность числа.
no subject
Date: 2009-12-13 06:49 pm (UTC)К тому же... если в серию запустить всю эту эзотерику, найдется ли еще кто либо с такими же мухами в голове чтобы адекватно поддерживать и развивать продукт ?
no subject
Date: 2009-12-13 07:03 pm (UTC)По второму - это никого не волнует. Ни клиентов, ни руководство. Я поднимал более важный вопрос - что никто кроме меня толком не знает предметной области трех проектов - всем по барабану. "Дешево, быстро, проблем нет", все, никто не чешется.
no subject
Date: 2009-12-14 08:09 am (UTC)no subject
Date: 2009-12-13 06:59 pm (UTC)no subject
Date: 2009-12-13 07:07 pm (UTC)А вот как оно реально внутри обрабатывается - это загадка, потому что все что я вижу - требование иметь функцию fromRational класса Fractional.
no subject
Date: 2009-12-13 07:12 pm (UTC)no subject
Date: 2009-12-13 07:15 pm (UTC)Ну в принципе Rational для десятичных чисел хорошо подходит, просто Fractional они зря сюда приплели, т.к. у него кроме fromRational еще (/) и recip которые тут ни с какого боку вообще.
no subject
Date: 2009-12-13 07:19 pm (UTC)получше организованные :-)
no subject
Date: 2009-12-13 07:23 pm (UTC)no subject
Date: 2009-12-13 08:50 pm (UTC)http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html#rebindable-syntax
no subject
Date: 2009-12-13 08:52 pm (UTC)no subject
Date: 2009-12-13 11:34 pm (UTC)no subject
Date: 2009-12-13 11:41 pm (UTC)no subject
Date: 2009-12-14 03:26 pm (UTC)no subject
Date: 2009-12-14 05:50 pm (UTC)no subject
Date: 2009-12-14 05:51 pm (UTC)no subject
Date: 2009-12-14 06:52 pm (UTC)Для денег поэтому всегда используют только decimal, в виде N/(10^M), где N и M - целые числа. В дельфи, в частности, N = [-2^63..2^63-1], M=4. И то, этого не всегда хватает, приходится извращаться с дополнительными масштабными коэффициентами.
no subject
Date: 2009-12-15 12:38 pm (UTC)no subject
Date: 2009-12-15 12:40 pm (UTC)no subject
Date: 2009-12-15 12:56 pm (UTC)