Dmitry
Кажется, всё равно надо как-то в одном из аргументов тип указывать. Вот так: 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
Dmitry
Включил {-# LANGUAGE ExplicitForAll #-}, всё равно где-то аргумент с типом должен быть...
Dmitry
А как сделать PropertyT IO ()?
Dmitry
Т.е. вот код: 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 А вот не получается
Cheese
Proxy решает именно эту задачу — указывать тип в каком-нибудь аргументе, когда нет такого аргумента
Cheese
добавляй аргумент Proxy ty
Dmitry
Тоже включено
Dmitry
Или что?
Cheese
скорее всего, там где-то компилятор предлагает AllowAmbiguousTypes
Dmitry
Предлагает, да.
Dmitry
Ну, попробую с ним...
A64m
там где определена функция, которая имеет параметр типа, но нету параметра, который такому типу соотвествует вроде forall foo. Bar -> Baz
Dmitry
С AllowAmbiguousTypes закомпилилось!
Dmitry
Я думал, это расширение лучше не включать, но сейчас читаю, норм.
Dmitry
Спасибо за помощь!
A64m
это расширение отключает проверку, которая не давала писать код, который можно использовать только с @, когда @ еще не было
Cheese
Я думал, это расширение лучше не включать, но сейчас читаю, норм.
это как раз для случая, когда функции нужен тип, но она не может его вывести из аргументов
Dmitry
@cblp_su , @A64m_qb0 Понятно, спасибо!
Alexander
AllowAmbiguosTypes же не очень, она переносит проверку типов в call site?
Alexander
/me пошел перечитывать мануал
Alexander
какието были, но сходу не сообразить
Alexander
может в преtype application era были
Anonymous
@OptionalChaos будет жить. Поприветствуем!
Anonymous
Vyacheslav будет жить. Поприветствуем!
Vyacheslav
Опасный парень у вас на входе
Valery
✋🙂
Anonymous
@Sm1ters будет жить. Поприветствуем!
Anonymous
@tsopin будет жить. Поприветствуем!
Vladislav
AllowAmbiguosTypes же не очень, она переносит проверку типов в call site?
Она ничего не переносит, она отключает ambiguity check
Vladislav
То есть на definition site не выполняется проверка, которая в мире с TypeApplications все равно имеет мало смысла
Vladislav
Та проверка, что в call site, включена всегда
Vladislav
Она и не проверка-то строго говоря, а просто неспособность вывести значение переменной типа
A64m
там нечего проверять же, все что раньше проверялось нормальный, используемый код после появления @
Anonymous
@v1nc11 будет жить. Поприветствуем!
Anonymous
@pavelcrane будет жить. Поприветствуем!
Alexander
а у нас есть время, которое по человечески в бинарные данные можно сериализовать?
Alexander
@A64m_qb0 ^
Alexander
POSIXTime это Integer, UTCTime как?
A64m
не знаю
A64m
в thyme или как это пакет назывался
A64m
вроде было что-то фиксированного размера
Alexander
о круто
Alexander
да ну?
Alexander
там UTCTime обычный и Integer сплошные
Anonymous
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
эффективно serializable
Anonymous
Компактно?
Alexander
быстро, скорее
Alexander
но оно очень соотносится
Alexander
fixed length обычно быстрее
Alexander
ну и без Fractional если Binary
Alexander
а то там не очень решение
Anonymous
я там на скорость и размер совсем не смотрел. Либа для удобства.
Alexander
ну thyme норм
Alexander
вроде
Anonymous
А в каком модуле в thyme Binary instance?
Alexander
нету, но ничего не мешает написать ^. posixTime . mixroseconds
Anonymous
https://www.haskell.org/hoogle/?hoogle=%28%5E.%29
Alexander
это все id замаскированный
Anonymous
я до линз ещё не добрался. Попробую добавить сиротский Binary для UTCTime Или лучше просто ф
Kirill
Вроде самым хиповым @qni
Kirill
блин, дурацкая клава
Kirill
в общем @qnikst ещё чот тёрли за http://hackage.haskell.org/package/chronos
Kirill
самое быстрое форматирование и близкое к машинным чиселкам
Alexander
норм
Alexander
ну у thyme так же примерно должно быть, тут суть похожая
Alexander
в chronos хотя меньше от воли компилятора зависит
Kirill
вроде где-то ещё бенчи пробегали, где он пошустрей был
Kirill
от мэта парсонса чтоль
Alexander
ясно, буду иметь ввиду
Alexander
пасиб
Anonymous
@yargeel будет жить. Поприветствуем!
Alexander
Вопрос: а можно ли использовать Type Application на переменных типа, описанных в сигнатуре функции? func :: c -> IO () func cVal = do someFunc @ c Я что-то не могу найти в доке этой инфы
Cheese
вот так можно func :: forall c. c -> IO () func cVal = do someFunc @c
Cheese
forall, чтобы ввести переменную