Size: a a a

2020 June 26

TA

Tel Asc in Haskell
А может и с State...
Сложна...
источник

TA

Tel Asc in Haskell
Возник ещё вопрос:
Как на уровне типов сделать что-то такое:
(Либо (forall x.x -> x) (a -> a)) -> a -> a

Т.е. указать:
Либо функция работает для любых переменных либо для конкретной а ...
источник

TA

Tel Asc in Haskell
Без Either...
источник

MK

Maxim Koltsov in Haskell
data Libo a where
источник

TA

Tel Asc in Haskell
И какой должна быть реализация?
источник

MK

Maxim Koltsov in Haskell
data Libo a where
 Luboy :: forall x. (x -> x) -> Libo a
 Concretny :: (a -> a) -> Libo a
источник

MK

Maxim Koltsov in Haskell
хотя нет, тут же x тоже конкретный, просто неизвестный...
источник

MK

Maxim Koltsov in Haskell
λ> data Libo a where Luboy :: (forall x. x -> x) -> Libo a; Concretny :: (a -> a) -> Libo a
λ> use :: Libo Int -> Int -> String; use (Luboy f) v = show $ f v; use (Concretny f) v = show $ f v
λ> use (Luboy id) 42
"42"
λ> use (Concretny (+1)) 42
"43"
источник

MK

Maxim Koltsov in Haskell
Tel Asc
И какой должна быть реализация?
так работает
источник

к

кана in Haskell
Either же
источник

MK

Maxim Koltsov in Haskell
кана
Either же
а в айзер можно ранк н тип положить? я не помню
источник

к

кана in Haskell
Either (forall x. x -> x) (a -> a)
источник

к

кана in Haskell
Maxim Koltsov
а в айзер можно ранк н тип положить? я не помню
конечно, Left id
источник

MK

Maxim Koltsov in Haskell
и правда...
источник

MK

Maxim Koltsov in Haskell
мне казалось тут ghc does not yet support imredicative types будет
источник

MK

Maxim Koltsov in Haskell
а какие правила тогда, когда нельзя?
источник

к

кана in Haskell
Maxim Koltsov
мне казалось тут ghc does not yet support imredicative types будет
да, так и будет, хм
источник

к

кана in Haskell
но мне абсолютно не ясно почему
источник

MK

Maxim Koltsov in Haskell
но вот мой пример работает
источник

к

кана in Haskell
data T a = L (forall x. x -> x) | R (a -> a)

f :: T Int
f = L id
источник