Вот в никсе применение функций через пробел, как в хаскеле, но и элементы списка тоже через пробел (запятых нет), в итоге код вида nixpkgs.overlays = [ import ../overlays/nixpkgs-stackage ] ; Падает с ошибкой, ну ладно бы просто с ошибкой, она выглядит вот так. error: infinite recursion encountered, at undefined position (use '--show-trace' to show detailed location information) building Nix... error: infinite recursion encountered, at undefined position (use '--show-trace' to show detailed location information) building the system configuration... error: infinite recursion encountered, at undefined position (use '--show-trace' to show detailed location information) И после этого ошибки типизации в хаскеле не понятные? Да я ебал.
nix-repl> a = import <nixpkgs> {} nix-repl> b = a nix-repl> a == b error: assertion failed at /nix/store/zkqn8mj44lp5ii8ck2jxp137y9w6d1g1-nixos-19.03pre159472.80738ed9dc0/nixos/pkgs/top-level/all-packages.nix:9202:12 Вот это МОЩА!
nix-repl> a = import <nixpkgs> {} nix-repl> b = import <nixpkgs> {} nix-repl> a == b false
nix-repl> a = { outPath = /out/path; } nix-repl> a + "azaza" "/out/pathazaza" nix-repl> b = { outFath = /out/path; } nix-repl> b + "azaza" error: cannot coerce a set to a string, at (string):1:1 Напоминает видосы про Javascript WTF
Обнаружен древний код на хаскеле, исполнение которого дарует секрет вечной жизни Prelude> data Data = Data Data Prelude> let d = Data d Prelude> show d
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 Чтобы правильно, с учётом всех подводных камней и самому не писать?
Prelude> divMod 5 60 (0,5) Prelude> divMod (-5) 60 (-1,55) Я как-то не правильно понимаю целочисленное деление?
А я тут хаскельным квикчеком нашёл весёлый кейс > 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 меньше. Гуголь чет ни чего не говорит по этому поводу. Я первооткрыватель?
> var c = function(x) { return x; }; undefined > typeof(c); 'function' > c.vnezapno = 'govno'; 'govno' > c.vnezapno 'govno' > typeof(c) 'function' > typeof(c.vnezapno) 'string'
% 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 имеет не то тип, который я ожидал.
bash-4.3# du -hsc / 13.7M / 13.7M total Образ в докере с alpine linux собранной на musl ...
Невероятные приключения единиц измерения: -- | 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` ... блять ...
hasktags -e $(find `pwd` -iname '*.hs' -and \( -not -path '*.stack-work*' \) -and \( -not -name 'Setup.hs' \) -and -type f)
instance SomeClass A B совершенно не то-же самое, что instance (a ~ A) => SomeClass a B мне стыдно, что я думал иначе.
Это гениально static void rotate_port (struct connection *c) { switch (c->port) { case 443: c->port = 80; break; case 80: c->port = 25; break; case 25: c->port = 443; break; } }
А сахарок для вот такого вот 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 делается. Вот это было бы очень круто, я считаю.