
Dmitry
06.08.2018
13:59:00
Что-то не получается

Yuriy
06.08.2018
14:02:47
классический способ — Proxy
f :: Proxy ty -> m a
...
VA -> f (Proxy :: Proxy VA)

Dmitry
06.08.2018
14:03:35
А, про Proxy мало знаю. Сейчас попробую...

Yuriy
06.08.2018
14:03:36
современный способ
f :: forall ty. m a
...
VA -> f @VA

Google

Dmitry
06.08.2018
14:03:52
О, вот так ваще атас
А как это назвается?

Yuriy
06.08.2018
14:04:13
"современный" требует кучу расширений включить

Dmitry
06.08.2018
14:04:22
Чтоб загуглить

IC
06.08.2018
14:04:35

Yuriy
06.08.2018
14:04:38
основная часть — TypeApplications

IC
06.08.2018
14:05:16
AllowAmbiguous, TypeApplications... RankNTypes?

Yuriy
06.08.2018
14:05:49


Dmitry
06.08.2018
14:33:40
Кажется, всё равно надо как-то в одном из аргументов тип указывать. Вот так:
mytest :: forall ty . (Serialise ty, Show ty, Arbitrary ty) => PropertyT IO ()
не компилируется:
• Could not deduce (Serialise ty0)
from the context: (Serialise ty, Show ty, Arbitrary ty)
А вот так получается:
mytest :: forall ty . (Serialise ty, Show ty, Arbitrary ty) => PropertyT IO ty
Включил {-# LANGUAGE ExplicitForAll #-}, всё равно где-то аргумент с типом должен быть...
А как сделать PropertyT IO ()?
Т.е. вот код:
mytest :: forall ty . (Serialise ty, Show ty, Arbitrary ty) => PropertyT IO ()
mytest = do
vx <- forAll Gen.arbitrary
H.assert $ not $ BSL.null (C.serialise (vote @tx))
Вот тут https://kseo.github.io/posts/2017-01-08-visible-type-application-ghc8.html пишут, что надо включить ExplicitForAll и будет получаться:
{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE TypeApplications #-}
incShow :: forall a . (Read a, Show a, Num a) => String -> String
incShow = show . (+1) . read @a
А вот не получается

Google

Yuriy
06.08.2018
14:43:27
Proxy решает именно эту задачу — указывать тип в каком-нибудь аргументе, когда нет такого аргумента
добавляй аргумент Proxy ty

A64m
06.08.2018
14:44:13

Dmitry
06.08.2018
14:44:35
Тоже включено
Или что?

Yuriy
06.08.2018
14:44:49
скорее всего, там где-то компилятор предлагает AllowAmbiguousTypes

Dmitry
06.08.2018
14:45:30
Предлагает, да.
Ну, попробую с ним...

A64m
06.08.2018
14:47:14
там где определена функция, которая имеет параметр типа, но нету параметра, который такому типу соотвествует вроде forall foo. Bar -> Baz

Dmitry
06.08.2018
14:49:03
С AllowAmbiguousTypes закомпилилось!
Я думал, это расширение лучше не включать, но сейчас читаю, норм.
Спасибо за помощь!

A64m
06.08.2018
14:50:21
это расширение отключает проверку, которая не давала писать код, который можно использовать только с @, когда @ еще не было

Yuriy
06.08.2018
14:50:31

Dmitry
06.08.2018
14:59:09
@cblp_su , @A64m_qb0 Понятно, спасибо!

Alexander
06.08.2018
15:03:52
AllowAmbiguosTypes же не очень, она переносит проверку типов в call site?
/me пошел перечитывать мануал

Yuriy
06.08.2018
15:08:48

Alexander
06.08.2018
15:10:07
какието были, но сходу не сообразить
может в преtype application era были

Google

Terminator
06.08.2018
16:30:53
@OptionalChaos будет жить. Поприветствуем!
Vyacheslav будет жить. Поприветствуем!

Vyacheslav
06.08.2018
16:34:51
Опасный парень у вас на входе

Валерий
06.08.2018
16:37:55
✋?

Terminator
06.08.2018
16:46:12
@Sm1ters будет жить. Поприветствуем!
@tsopin будет жить. Поприветствуем!

Index
06.08.2018
17:33:26
То есть на definition site не выполняется проверка, которая в мире с TypeApplications все равно имеет мало смысла

Alexander
06.08.2018
17:44:19

Index
06.08.2018
17:47:12
Та проверка, что в call site, включена всегда
Она и не проверка-то строго говоря, а просто неспособность вывести значение переменной типа

A64m
06.08.2018
17:47:46
там нечего проверять же, все что раньше проверялось нормальный, используемый код после появления @

Terminator
06.08.2018
19:02:55
@v1nc11 будет жить. Поприветствуем!
@pavelcrane будет жить. Поприветствуем!

Alexander
06.08.2018
19:25:14
а у нас есть время, которое по человечески в бинарные данные можно сериализовать?
@A64m_qb0 ^
POSIXTime это Integer, UTCTime как?

A64m
06.08.2018
19:38:14
не знаю
в thyme или как это пакет назывался

Admin
ERROR: S client not available

Google

A64m
06.08.2018
19:38:50
вроде было что-то фиксированного размера

Alexander
06.08.2018
19:45:53
о круто

Imants
06.08.2018
20:04:33

Alexander
06.08.2018
20:45:21
да ну?
там UTCTime обычный и Integer сплошные

Imants
06.08.2018
20:51:25
instance Binary (DatePart Int) -- ^ serializeable
see "Data.Time.Hora.Part" for conversion between 'UTCTime' and 'DatePart'
https://hackage.haskell.org/package/hora-2.0.2/docs/Data-Time-Hora-Part.html

Alexander
06.08.2018
20:55:04
эффективно serializable

Imants
06.08.2018
20:55:26
Компактно?

Alexander
06.08.2018
20:55:34
быстро, скорее
но оно очень соотносится
fixed length обычно быстрее
ну и без Fractional если Binary
а то там не очень решение

Imants
06.08.2018
20:57:45
я там на скорость и размер совсем не смотрел. Либа для удобства.

Alexander
06.08.2018
21:04:50
ну thyme норм
вроде

Imants
06.08.2018
21:13:07
А в каком модуле в thyme Binary instance?

Alexander
06.08.2018
21:18:42
нету, но ничего не мешает написать ^. posixTime . mixroseconds

Imants
06.08.2018
21:21:47
https://www.haskell.org/hoogle/?hoogle=%28%5E.%29

Alexander
06.08.2018
21:22:36

Google

Alexander
06.08.2018
21:22:49
это все id замаскированный

Imants
06.08.2018
21:25:00
я до линз ещё не добрался.
Попробую добавить сиротский Binary для UTCTime
Или лучше просто ф

Kirill
06.08.2018
21:25:10
Вроде самым хиповым @qni
блин, дурацкая клава
в общем @qnikst ещё чот тёрли за http://hackage.haskell.org/package/chronos
самое быстрое форматирование и близкое к машинным чиселкам

Alexander
06.08.2018
21:26:41
норм