Size: a a a

2021 November 01

[

[BRM]White Rabbit in Haskell Start
я ньютайп запилил с нужными опциями и пошёл бегать по проекту с deriving via
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Примерно такое, но в виде инстанса для newtype-обертки над Double
источник

E

Elijah in Haskell Start
я примерно такое и пытаюсь сейчас родить, но проблема в том что эта функция продолжала фейлиться с той же ошибкой
источник

[

[BRM]White Rabbit in Haskell Start
вот такие чуда с withObject можно композить между собой с помощью <|>
источник

E

Elijah in Haskell Start
то есть у меня было cod <- o .: "cod" :: Parser Double, а стало cod <- o .: "cod" >>= parseCod, это компилируется но не дает результата
источник

[

[BRM]White Rabbit in Haskell Start
у тебя получится что-то типа
\v ->  withText "Foo" (\text -> pure . StringConst . Text.unpack $ text)  v  
  <|> withScientific "Foo" (\num -> pure . NumberConstr . scientificToInt $ num) v
источник

[

[BRM]White Rabbit in Haskell Start
это я примерно накидал, не уверен, что тебе подойдёт
источник

E

Elijah in Haskell Start
супер
источник

E

Elijah in Haskell Start
осталось мне понять почему это работает)
источник

E

Elijah in Haskell Start
но это я сам
источник

E

Elijah in Haskell Start
спасибо
источник

AP

Aleksei (astynax) Pi... in Haskell Start
import qualified Data.ByteString.Lazy.UTF8 as BSL8

newtype Code = Code Double deriving Show

instance FromJSON Code where
  parseJSON x = Code <$> (parseJSON @Double x <|> fromText x)

fromText v =
  maybe (fail "Non-number") pure =<< decode @Double . BSL8.fromString <$> parseJSON v
источник

AP

Aleksei (astynax) Pi... in Haskell Start
> decode @Code "\"42.0\""
Just (Code 42.0)
> decode @Code "42.0"
Just (Code 42.0)
> decode @Code "foo"
Nothing
источник

AP

Aleksei (astynax) Pi... in Haskell Start
(мог чего-то забыть, потому как из REPL копипастил, но суть такая)
источник

E

Elijah in Haskell Start
я сделал вот так
parseCod :: Value -> Parser (Either String Double)
parseCod v =
 withText "cod" (pure . Left . T.unpack) v
   <|> withScientific "cod" (pure . Right . toRealFloat) v
источник

E

Elijah in Haskell Start
это сработало
источник

E

Elijah in Haskell Start
но вот чтобы инстанс, то я не могу понять как его обобщить до любых двух JSON-типов
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Мой вариант просто декодирует JSON из строкового значения в JSON :)
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Более всеядно
источник

E

Elijah in Haskell Start
и что за @Code я же еще ребенок
источник