to post messages and comments.

← All posts tagged code

octave:3> a = 8000 / 12380664
a =    6.4617e-04
octave:4> b = 300 / 720575
b =    4.1633e-04
octave:5> a / b
ans =  1.5520

Интересный факт, население Москвы в среднем в 1.552 раза тупее населения Тюмени.

Тупой вопрос: есть готовое, чтобы заменить имя файла вида

~/file/path

на

/home/user/file/path

Чтобы правильно, с учётом всех подводных камней и самому не писать?

А я тут хаскельным квикчеком нашёл весёлый кейс

> d = new Date(2006, 02, 26, 02, 28, 53);
Sun Mar 26 2006 03:28:53 GMT+0600 (+06)
> d = new Date(2006, 02, 26, 0, 0, 0);
Sun Mar 26 2006 00:00:00 GMT+0500 (+05)
> d = new Date(2006, 02, 26, 1, 0, 0);
Sun Mar 26 2006 01:00:00 GMT+0500 (+05)
> d = new Date(2006, 02, 26, 2, 0, 0);
Sun Mar 26 2006 03:00:00 GMT+0600 (+06)
> d.getHours()
3

Работает в последнем хромаче, в фоксе, наоборот, час становится на 1 меньше. Гуголь чет ни чего не говорит по этому поводу. Я первооткрыватель?

% nslookup github.com
;; Got SERVFAIL reply from 8.8.8.8, trying next server
Server:         127.0.0.1
Address:        127.0.0.1#53

** server can't find github.com: SERVFAIL

Регуряно испытваю проблемы с днс, в чем может быть проблема? Сначал думал на нетворкманагер, но Got SERVFAIL reply from 8.8.8.8, это вообще возможно?

reactSelect_
  :: (ToJSON a, CallbackFunction handler (SelectOption a -> handler))
  => SelectParameters handler a
  -> ReactElementM handler ()
reactSelect_ opts = foreign_ "Select" opts mempty
  where
    opts :: [PropertyOrHandler handler]
    opts = [callback "onChange" (_ opts)]


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

Невероятные приключения единиц измерения:

-- | Absolute size unit convertion rate to centimeters.
absoluteUnitRate :: AbsoluteUnit -> Rational
absoluteUnitRate Centimeter = 1
absoluteUnitRate Inch = 2.54
absoluteUnitRate Millimeter = 0.1
absoluteUnitRate Pica = 12 * absoluteUnitRate Point
absoluteUnitRate Point = 1 / 72 * absoluteUnitRate Inch -- ну охуеть теперь!

xmonad-contrib % grep -e 'fi\ ::' `find -iname '*.hs'`
./XMonad/Util/Font.hs:fi :: (Integral a, Num b) => a -> b
./XMonad/Util/NoTaskbar.hs:fi :: (Integral i, Num n) => i -> n
./XMonad/Actions/Navigation2D.hs:fi :: (Integral a, Num b) => a -> b
./XMonad/Layout/Fullscreen.hs:  let fi :: (Integral i, Num n) => i -> n
./XMonad/Layout/AvoidFloats.hs:fi :: (Integral a, Num b) => a -> b
./XMonad/Layout/Dwindle.hs:        fi :: (Num b, Integral a) => a -> b

Синоним для `fromIntegral` ... блять ...

А сахарок для вот такого вот 

monadicAction = do
  x :: [NonEmpty (Some, Weird, Type Int)]
  x <- whatever

еще никто не предлагал? В летах можно, а в биндах - нет. Обидно, было бы очень удобно. Особенно иногда.

А в хаскеле еще не обсуждается нечто типа closed typeclasses? Чтобы вот такое вот

-- | Typeclass for sets and elements.
class (i ~ (Index e els)) => HGet els e i where
  -- | Gets any data from HSet for you
  hget :: HSet els -> e

instance HGet (e ': els) e 'Z where
  hget (HSCons e _) = e

instance (i ~ (Index e els), ('S i) ~ (Index e (e1 ': els)), HGet els e i) => HGet (e1 ': els) e ('S i) where
  hget (HSCons _ els) = hget els

Делать без третьего параметра. Тут не внапряг, а в других случаях бывает сильно сложнее, и бомбит еще больше. 
Ну короче, выбирать инстансы сверху вниз, как это в closed typefamilies делается. Вот это было бы очень круто, я считаю.

* Что надо сделать перед релизом
** Запустить тесты
** Исходный код
*** Проверить экспорты, все ли экспортировано, что сделано
*** Проверить актуальность документации
*** Проверить доктесты
** Кабал файл
*** Бампануть версию
*** Проверить synopsis
*** extra-source-files
**** CHANGELOG
**** файлы примеров
*** homepage
*** source-repository
*** версии зависимостей
*** экспортируемые модули
** Другие файлы
*** Обновить changelog
*** Обновить файлы с примерами

Это типа чеклист того, что нужно проверить перед очередным релизом своего костыля, чтобы не зафейлиться. Я чего-нибудь пропустил?

А чем вот это

    data EntityField User typ
        = (typ ~ UserIdType) => UserId
        | (typ ~ Text)       => UserName
        | (typ ~ Maybe Text) => UserPasswordEncrypted
        | (typ ~ Text)       => UserPhone
        | (typ ~ UTCTime)    => UserCreated
        | (typ ~ UTCTime)    => UserUpdated

отличается от 

    data EntityField User typ where ....

Как принято в GADT?

[d|deriving instance Ord $(undefined)|]
Вполне компилируется, а вот конструктор StandaloneDerivD в Dec появился только в template-haskell-2.10
Выходит, что непервоклассная квазиквота `d` возвращает значение, которое невозможно сконструировать, или оно просто не экспортировано (но зачем?!)
Пиздос, что там за ад творится в этих магических квазиквотах и почему они таки не первоклассные? Пора наверное TH в base совать, чтобы он шел вместе с компилятором ... ну и haskell-src-exts туда же.

#if __GLASGOW_HASKELL__ >= 704
type MonadResourceBase m = (MonadBaseControl IO m, MonadThrow m, MonadBase IO m, MonadIO m, Applicative m)
#else
class (MonadBaseControl IO m, MonadThrow m, MonadIO m, Applicative m) => MonadResourceBase m
instance (MonadBaseControl IO m, MonadThrow m, MonadIO m, Applicative m) => MonadResourceBase m
#endif

Дак это просто сахарок?