Size: a a a

2021 July 13

DB

Danil Berestov in Haskell
А, maybe (Left "kek") Right
источник

к

кана in Haskell
y :: Maybe Int

x <- case y of Just x -> Right x; Nothing -> Left "should be just"
источник

к

кана in Haskell
ну или так

я бы кейс написал скорее всего
источник

MK

Maxim Koltsov in Haskell
+
источник

DB

Danil Berestov in Haskell
Функция maybe чекни кароче
источник

K

Kir in Haskell
eitherToMaybe :: Either a b -> Maybe b
eitherToMaybe = either (const Nothing) Just

foo :: Float -> Either String Float
foo x = if x == 0 then Left "oh no" else Right (1 / x)

bar :: Maybe (Float, Float)
bar = do
 a <- eitherToMaybe $ foo 1
 b <- eitherToMaybe $ foo 2
 return (a, b)
источник

DB

Danil Berestov in Haskell
Кажется основная монада все же Either
источник

DB

Danil Berestov in Haskell
Но принцип тот же конечно
источник

K

Kir in Haskell
Аааа, блин
источник

K

Kir in Haskell
maybeToEither :: e -> Maybe a -> Either e a
maybeToEither e = maybe (Left e) Right
источник

к

кана in Haskell
все еще не очень ясно лично мне, зачем нужны все эти функции
источник

к

кана in Haskell
небольшое повышение сложности без бонусов
источник

K

Kir in Haskell
Согласен, лучше уж отрефакторить всё в MonadThrow m => m ()  или в MonadExcept e m => m (), на худой конец
источник

[

[BRM]White Rabbit in Haskell
Шоб генерализировать действие?
источник

к

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

DB

Danil Berestov in Haskell
Просто конструкторы изэра прячет)
источник

[

[BRM]White Rabbit in Haskell
Ну типа ты явно прописываешь мейби-ту-эйзер в отличие от другого варианта
источник

к

кана in Haskell
да, до MonadThrow уже выглядит немного полезнее
источник

к

кана in Haskell
и передаешь два аргумента, не очень понятно в каком порядке (что и повышает сложность), и не совсем очевидно какой именно конструктор Either-а берется, потому что в отличии от Except, у Either они равнозначны
источник

к

кана in Haskell
да, это просто прятанье конструкторов Either-а с повышением сложности
источник