Size: a a a

2021 January 06

к

кана in Haskell
coerce (+ (3 :: X)) :: Foo -> Foo - тоже валидный кандидат
источник

к

кана in Haskell
Жук Короед
И в случае
foo = coerce (+ (3 :: Int)) (Foo 15)
Он не может вывести тип coerce (+ (3 :: Int)
потому что результат может быть как Foo, так и Int
источник

к

кана in Haskell
так и X
источник

ЖК

Жук Короед in Haskell
Jerzy Syrowiecki
не из чего это выводить. coerce потенциально к вообще любым типам применим
То есть что, при использовании coerce нужно везде пихать применения типов или типовые аннотации, чтобы объяснять GHC что и куда?
источник

MK

Maxim Koltsov in Haskell
да
источник

к

кана in Haskell
источник

JS

Jerzy Syrowiecki in Haskell
Жук Короед
То есть что, при использовании coerce нужно везде пихать применения типов или типовые аннотации, чтобы объяснять GHC что и куда?
почти всегда. числовые литералы полиморфны, а вот такой Foo или X можно использовать без аннотации
источник

к

кана in Haskell
все варианты валидны, ghc не сможет выбрать сам ничего
источник

к

кана in Haskell
источник

JS

Jerzy Syrowiecki in Haskell
ну и не везде
источник

ЖК

Жук Короед in Haskell
Понял, спасибо 👀
источник

к

кана in Haskell
снизить количество аннотаций поможет TypeApplications
источник

JS

Jerzy Syrowiecki in Haskell
в этом примере, например, аннотации на результате coerce нет, зафиксирован только тип большего выражения, внутри которого используется coerce
источник

AS

Alexander Smirnov in Haskell
А можно как-то убедится в том, что бесконечный список будет вычисляться всего один раз?
источник

KV

Kirill Valyavin in Haskell
Alexander Smirnov
А можно как-то убедится в том, что бесконечный список будет вычисляться всего один раз?
В смысле, чтобы все вычисленные значения мемоизировались?
источник

AS

Alexander Smirnov in Haskell
Да. Я нашел в интернете инфу, что для именованных сущностей это происходит по умолчанию, но не очень понимаю само правило
источник

KV

Kirill Valyavin in Haskell
Если определить на топлевеле с конкретным типом, то должно мемоизироваться
источник

AS

Alexander Smirnov in Haskell
Спасибо! А есть какая-нибудь бесполезная директива чтобы это настраивать?
источник

KV

Kirill Valyavin in Haskell
Не уверен
источник

С

Сергей in Haskell
Kirill Valyavin
Если определить на топлевеле с конкретным типом, то должно мемоизироваться
а если тип полиморфный то не будет ?
источник