ところで、NonNegative の Arbitrary インスタンスの
arbitrary 関数の定義がこんなことになってるんだが

 arbitrary =
  (frequency
    -- why is this distrbution like this?
    [ (5, (NonNegative . abs) `fmap` arbitrary)
    , (1, return (NonNegative 0))
    ]
  ) `suchThat` ge0
  where ge0 (NonNegative x) = x >= 0

これは、一様分布に対して 0 が現れる割合を増やしてるんだよね
なんか意味あるんかな?

わざわざ suchThat で 0 以上を保証する意味も分からん
もともと abs で0以上の値を生成しているのでは?