Size: a a a

2020 December 13

AP

Aleksei (astynax) Pi... in Haskell Start
Паттерн матчинг в do работает не так, как в объявлении функций
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Частичная функция не делает fail, потому что нет контекста MonadFail
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Можно comprehension написать — там тоже работает fail матчинга
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Или делать явный case с fail в другой ветке. Собственно так do и рассахаривает биндинг в паттерн
источник

к

кана in Haskell Start
Artem Pelenitsyn
А как без do переписать ваш пример?
safeHead l = pure l >>= \case
 x:_ -> pure x
 _ -> fail "pattern matching bla bla"

pure l >>= тут конечно можно выпиливать спокойно
источник

AP

Artem Pelenitsyn in Haskell Start
Aleksei (astynax) Pirogov
Паттерн матчинг в do работает не так, как в объявлении функций
А, логично, спасибо
источник

A

Aragaer in Haskell Start
а как он тут поймет, что это именно Maybe?
источник

AP

Artem Pelenitsyn in Haskell Start
кана
safeHead l = pure l >>= \case
 x:_ -> pure x
 _ -> fail "pattern matching bla bla"

pure l >>= тут конечно можно выпиливать спокойно
Спасибо
источник

к

кана in Haskell Start
Aragaer
а как он тут поймет, что это именно Maybe?
никак, он работает с любым MonadFail
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Aragaer
а как он тут поймет, что это именно Maybe?
Так тут не именно Maybe, тут любой MonadFail
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Для list тоже будет работать
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Даст пустой список
источник

AP

Aleksei (astynax) Pi... in Haskell Start
> safeHead l = do { (x:_) <- pure l; pure x }
> safeHead [] :: [Int]
[]
> safeHead [] :: Maybe Int
Nothing
источник

AP

Aleksei (astynax) Pi... in Haskell Start
> :t safeHead
safeHead :: MonadFail m => [b] -> m b
источник

A

Aragaer in Haskell Start
ну я собственно потому и спросил, думал что вопрос именно в том, чтобы не любой, а конкретно maybe.
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Ну я же указываю тип, который хочу получить
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Можно указать Just вместо pure — будет явный Maybe
источник

A

Aragaer in Haskell Start
ага
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Aleksei (astynax) Pirogov
Можно comprehension написать — там тоже работает fail матчинга
> :set -XMonadComprehensions
> safeHead l = [x | (x:_) <- pure l]
> :t safeHead
safeHead :: MonadFail m => [b] -> m b
> safeHead [] :: Maybe Int
Nothing
источник

A

Aragaer in Haskell Start
про сегодняшний AoC - только мне было лень писать реализацию решения китайской теоремы об остатках?
источник