-- Semi-Isomorphisms on lists
nil :: Iso () [a]
nil = iso (\_ -> return []) toNil where
    toNil [] = Just ()
    toNil _  = Nothing
nil :: Iso () [a]
nil = iso (\_ -> return []) toNil where
    toNil [] = Just ()
    toNil _  = Nothing
nil = iso (\_ -> return []) toNil where
    toNil [] = Just ()
    toNil _  = Nothing