
Il 03 giugno 2021 alle 17:40 Galaxy Being ha scritto:
If I have a type
type WaterChem = CaHardness NaturalChem | Alkalinity NaturalChem
and I want to have the values of CaHardness and Alkalinity constrained to positive Int and between certain high and low values, I could do a newtype to creater a NaturalChem number, thus never less than 0, but what is the best practice to insure these values are between a certain range? Types in Haskell can't go that far, can they? Reading this
Mhhh you could create a smart constructor data Prova = ProvConst Int -- ProvConst does not get exported. mkProva :: Int -> Prova -- This does get exported. mkProva i | i > 100 = 100 -- or error "… ⁝ In a «Parse, don’t validate» [1] fashion. If you need (as I suspect) to operate on those values, you will need to define a few typeclasses (`numbers` [2] is a good example from Hackage). Would that do? —F [1] https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/ [2] https://hackage.haskell.org/package/numbers-3000.2.0.2/docs/Data-Number-Natu...