reader x | isAlgType x, [ctor] <- ctors x, [child] <- children x = do
    -- newtype wrapper, just forward it
    r <- reader child
    let down = head . children
    let up o c = recompose o [c]
    return r{readerFixup = \x -> up x $ readerFixup r $ down x
            ,readerRead = \x -> either Left (Right . up x) . readerRead r (down x)
            }
reader x | isAlgType x, [ctor] <- ctors x, [child] <- children x = do
    -- newtype wrapper, just forward it
    r <- reader child
    let down = head . children
    let up o c = recompose o [c]
    return r{readerFixup = \x -> up x $ readerFixup r $ down x
            ,readerRead = \x -> either Left (Right . up x) . readerRead r (down x)
            }
reader x | isAlgType x, [ctor] <- ctors x, [child] <- children x = do
    -- newtype wrapper, just forward it
    r <- reader child
    let down = head . children
    let up o c = recompose o [c]
    return r{readerFixup = \x -> up x $ readerFixup r $ down x
            ,readerRead = \x -> either Left (Right . up x) . readerRead r (down x)
            }