Size: a a a

2021 July 02

MK

Maxim Koltsov in Haskell
== из Data.Type.Bool вроде
источник

IO

I O in Haskell
А так опять нет

baz :: (forall r . (forall n . KnownNat n => Proxy n -> r) -> r) -> String
baz f = f \(Proxy :: Proxy n) -> x @n


Это точно так должно быть?
источник

DM

Dmitriy Mozhevitin in Haskell
что-то с  имплисит импортом Data.Type.Bool не завелось (не находит)
щас поищу, откуда оно
источник

MK

Maxim Koltsov in Haskell
Data.Type.Equality
источник

DM

Dmitriy Mozhevitin in Haskell
да
источник

MK

Maxim Koltsov in Haskell
вечно путаю
источник

DM

Dmitriy Mozhevitin in Haskell
все еще duplicated instance declaration
источник

DM

Dmitriy Mozhevitin in Haskell
некорректно сформулировал
имел ввиду разную логику в зависимости от того, пустая ли строка или нет
источник

IK

Ilya Kos in Haskell
Тут не работает потому что тут два интанса могут потенциально подойти, а для этого нужно знать сам тип (а в месте выбора он не известен)
источник

IO

I O in Haskell
Да, вопрос-то почему работает это

bar :: SomeNat -> String
bar (SomeNat (Proxy :: Proxy n)) = x @n


При том что такое ожидаемо не работает

baz :: (forall r . (forall n . KnownNat n => Proxy n -> r) -> r) -> String
baz f = f \(Proxy :: Proxy n) -> x @n
источник

IK

Ilya Kos in Haskell
Чтобы сделать то что ты тут хочешь надо name ~ “” вынести в голову (после `=>`). Читать тут: https://kseo.github.io/posts/2017-02-05-avoid-overlapping-instances-with-closed-type-families.html
источник

IK

Ilya Kos in Haskell
А инстансы там какие?
источник

DM

Dmitriy Mozhevitin in Haskell
спасибо, щас прочту
источник

IO

I O in Haskell

instance {-# OVERLAPPING #-} Foo 0 where
 x = "zero"

instance {-# OVERLAPPABLE #-} (KnownNat n) => Foo n where
 x = show $ natVal $ Proxy @n
источник

IO

I O in Haskell
Похоже, да. Пойду на всякий случай доку OVERLAPPING перечитаю
источник

IK

Ilya Kos in Haskell
Мне кажется, он всегда будет выводить число, даже есть передать 0
источник

IK

Ilya Kos in Haskell
В плане zero не будет выводить
источник

IK

Ilya Kos in Haskell
Если будет, то я очень сильно удивлюсь
источник

IK

Ilya Kos in Haskell
Но это не отвечает на вопрос, почему одно работает, а другое нет
источник

IK

Ilya Kos in Haskell
Overlapping instances в этом плане очень странный и его нужно пытаться избегать когда возможно
источник