[Haskell-cafe] incomplete-uni-patterns

Viktor Dukhovni ietf-dane at dukhovni.org
Thu Jan 26 04:03:23 UTC 2023

On Thu, Jan 26, 2023 at 09:05:40AM +0900, Kazu Yamamoto (山本和彦) via Haskell-Cafe wrote:

> Hello,
> The recent GHC added incomplete-uni-patterns to the -Wall option.
> So, we have a waning with the following code:
>     let [addr,port] = args
> To avoid this, I changed the code to:
>     let addr = head args
>         port = head $ tail args

The univeral option type is Maybe, so you leverage that:

    maybePair :: [a] -> Maybe (a, a)
    maybePair [a, b]    = Just (a, b)
    maybePair _         = Nothing

    knownPair :: [a] -> (a, a)
    knownPair           = fromJust . maybePair

and then anywhere you need to only match a 2-element list:

    let (a, b) = knownPair args

Or just:

    {-# OPTIONS_GHC -Wall -Wno-incomplete-uni-patterns #-}

    let [a, b] knownPair args

Perhaps mildly inconvenient at times, but I am inlined to think that
overall better than never reporting potential problem patterns.


More information about the Haskell-Cafe mailing list