Haskell: поднимите обычную функцию на линзу

У меня есть HashMap, который содержит разные вещи (значение от Aeson):

cs :: Hashmap Text Value
cs = fromList [("phone", String "+00"), ("count", Number 1)]

Я понял, что могу легко извлекать элементы с помощью Lens и, в частности, lens-aeson :

import Data.Aeson.Lens
import Data.Lens

phone :: Maybe Text
phone = preview (at "phone" . _Just . _String) cs

Это хорошо работает. Но как я могу получить свой счет как Int? Я попытался:

count :: Maybe Int
count = preview (at "count" . _Just . _Number) cs

Но это возвращает Maybe Scientific. Я нашел (в Data-Scientific):

toBoundedInteger :: forall i. (Integral i, Bounded i) => Scientific -> Maybe i 

Как поднять toBoundedInteger для работы в качестве линзы (или призмы) в моем предварительном просмотре выше?


person cdupont    schedule 27.10.2020    source источник


Ответы (1)