enforceRange (Just l_, _) (a::t)
    | l !<! a = a
    | otherwise = (2*l-a+1)
    where
    l = convertExactly l_ :: t
enforceRange (Just l_, _) (a::t)
    | l !<! a = a
    | otherwise = (2*l-a+1)
    where
    l = convertExactly l_ :: t
enforceRange (Just l_, _) (a::t)
    | l !<! a = a
    | otherwise = (2*l-a+1)
    where
    l = convertExactly l_ :: t