@0xd34df00d

Тег haskell в блоге 0xd34df00d

0xd34df00d

Вообще от полноценных зависимых типов и их выразительной мощности мозги выворачивает получше, чем в свое время выворачивало от чистой функциональщины в х-ле.

#midec
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Люблю делать eix-sync, а потом читать, чо там нового в мире хаскеля.

#mdyhi
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

https://github.com/lexi-lambda/hackett

Какой-то хаскелист выебал a13, походу.

#mizbq
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Пусть есть https://wandbox.org/permlink/cM3SzfU3T8OwaCnp . Как теперь с минимальными усилиями обойти someTree и превратить его в [Row "top" "1" "" "", Row "mid" "" "2" "", Row "leaf" "" "" "3", ...]?

В идеале хотелось бы какую-нибудь дженерик-магию вроде Uniplate'овского universeBi, но тот требует жёсткого задания исходного типа.

#mizuw
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Даже кусочек Template Haskell для нетривиального вывода JSON-инстансов означает, что ghc-mod будет интерпретировать код, а не компилировать его, и все автокомплиты и прочая основанная на ghc-mod поебень будет отрабатывать по 10 секунд.

Плохо зделоли.

#mizts
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Теперь в хаскеле^W vim люто не хватает make case, case split, obvious proof search и вот этого вот всего для хаскеля.

#mbuwm 3
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Ставь лойс, если тоже бугуртишь, что в hmatrix в матрицы нельзя запихивать Data.Ratio :(

#mihpr
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Довольно забавно в этом вашем идрисе то, что язык-то неленивый, но в repl при выполнении работает по факту компил-тайм-эвалюатор, который построен на хаскелевском рантайме, который ленивый. Короче, при тестах в repl получаем вполне себе каноничное ленивое выполнение.

#mbanq
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Нельзя сделать record update для поля с экзистенциально квантифицированным типом:

data Foo = forall a. Foo { prod :: a, cons :: a -> String }

someFoo = Foo () (const "such existentials")

otherFoo = someFoo { cons = const "much polymorphism" }

Последняя строка ругнётся, хотя казалось бы.

А всего-то хотел сайт на хачкеле сделать.

#okdof 1
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

GADT record syntax. То есть, можно писать

data Foo where
    Foo :: { prod :: a, cons :: a -> b } -> Foo

вместо

data Foo where
    Foo :: a -> (a -> b) -> Foo
#okxff
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Отпрофилировал сборку личкрафтосайта (а то 12 секунд занимает).

50% времени и 54% аллокаций жрёт https://github.com/jaspervd...l/Core/Store.hs#L196 . Заебатый код.

#ojhvk 5
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Тихо и незаметно stack lts-10.0 с ghc 8.2.

#owtrf
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

В очередной раз уперся в импредикативный полиморфизм и магию доллара.

#ojuxn
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Впервые ковыряюсь в чужом cabal-only-проекте ( https://github.com/gregorycollins/hashtables ). Не могу собрать тесты этим сраным кабалом:

21:59:08 d34df00d@deadaven ~/Programming/hashtables/test (master) % ./runTestsNoCoverage.sh 
Testsuite executable not found, please run:
    cabal configure -ftest
then
    cabal build
21:59:12 d34df00d@deadaven ~/Programming/hashtables/test (master) % cabal configure -ftest
Resolving dependencies...
Warning: solver failed to find a solution:
Could not resolve dependencies:
trying: hashtables-test-0.2 (user goal)
next goal: test-framework-hunit (dependency of hashtables-test-0.2)
Dependency tree exhaustively searched.
Trying configure anyway.
Configuring hashtables-test-0.2...
cabal: Encountered missing dependencies:
test-framework >=0.3.1 && <0.9,
test-framework-hunit >=0.2.6 && <3,
test-framework-quickcheck2 >=0.2.6 && <0.4

Чо оно?

#owitf 2
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Хаскель надрал гошку, лё.

{-# LANGUAGE OverloadedStrings #-}

module Main where

import qualified Snap.Core as S
import qualified Snap.Http.Server as S
import Data.Monoid

main :: IO ()
main = S.httpServe cfg site
    where cfg = S.setAccessLog S.ConfigNoLog $ S.setPort 13000 S.emptyConfig

site :: S.Snap ()
site = S.route [("/", S.writeBS "Hello World!"),
                ("/greeting", greet)]
    where greet = do
            r <- S.getRequest
            S.writeBS $ "Hello, " <> S.rqPathInfo r

даёт 10.5 мс на запрос на моей машине против 12.5 мс для аналогичного кода на go.

#oztyt 6
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Чо-т раньше монадные трансформеры только так делались, а тут потребовалось, чтобы в стеке был IO, и все, слооожна что-то.

#oziqo 2
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Прикрутил к vim'у syntastic с хаскелевскими чекерами. Теперь при разработке даже в REPL лезть не надо, при сохранении файла и так всё сразу видно.

Охуенно, продуктивность ×2.

#ozirx 10
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

-freverse-errors, чтобы наиболее близкая к контексту ошибка была последней, и не надо было скроллить.

#ojfuh
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Пусть есть

data Provider p = Provider { urlPattern :: p, ... }

buildPattern :: T.Text -> Either String UrlPattern

и ты хочешь сделать функцию

parseProviderPattern :: Provider T.Text -> Either String (Provider UrlPattern)

Ты просто пишешь у Provider в списке deriving (Functor, Foldable, Traversable), компилятор сам всё выводит, и потом ты просто делаешь

parseProviderPattern prov = sequence $ buildPattern <$> prov

А в main потом можно воспользоваться монадической структурой Either и написать

case mapM parseProviderPattern provs of
    Right provs' -> httpServe cfg $ site provs
    Left err -> putStrLn err

чтобы запустить хттп-сервер с этими провайдерами.

Хаскель охуенный. Люблю его ♥

#ojazp
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
0xd34df00d

Впервые попробовал STM. Охуенно. Особенно когда в транзакции нетривиальный код, а об инвариантах и влиянии тредов на них можно даже не думать.

#oztbx 13
Вы можете выбрать до 10 файлов общим размером не более 10 МБ.

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.