[Haskell-beginners] Get rid of Maybes in complex types

Frerich Raabe raabe at froglogic.com
Thu Jul 6 10:02:12 UTC 2017


On 2017-07-06 10:12, Baa wrote:
> Consider, I retrieve from external source some data. Internally it's
> represented as some complex type with `Maybe` fields, even more, some
> of fields are record types and have `Maybe` fields too. They are
> Maybe's because some information in this data can be missing (user
> error or it not very valuable and can be skipped):
> 
>   data A = A {
>     a1 :: Maybe B
>     ... }
>   data B = B {
>     b1 :: Maybe C
>     ... }
> 
> I retrieve it from network, files, i.e. external world, then I validate
> it, report errors of some missing fields, fix another one (which can be
> fixed, for example, replace Nothing with `Just default_value` or even I
> can fix `Just wrong` to `Just right`, etc, etc). After all of this, I
> know that I have "clean" data, so all my complex types now have `Just
> right_value` fields. But I need to process them as optional, with
> possible Nothing case! To avoid it I must create copies of `A`, `B`,
> etc, where `a1`, `b1` will be `B`, `C`, not `Maybe B`, `Maybe C`. Sure,
> it's not a case.

I understand that your data structures as sketched above are only needed for 
a short time, when reading/validating/fixing the input data - the rest of the 
program would either report an error (for unrecoverable problems) or process 
the validated data?

In that case, maybe you can avoid using Maybe in your data types for things 
which definitely must be present completely but rather returning a 'Maybe' 
value from your function which retrieves the data, i.e.:

   retrieveData :: ByteString -> Maybe A

Within 'retrieveData' you could then use different weakly-typed data 
structures which maybe only represent subsets of the data as you 
parse/validate/fix it. Not sure if/how that would work out, but maybe you 
could share some more concrete code (e.g. the actual logic for retrieving the 
data and the data types)?

-- 
Frerich Raabe - raabe at froglogic.com
www.froglogic.com - Multi-Platform GUI Testing


More information about the Beginners mailing list