labelAt :: forall l n . (HList l, CNum n, HLookup l n) => n -> Label St l (HAt l n)
labelAt _ = StLabel (\l -> lookup l (undefined::n)) 
                    (\l -> \v -> update l (undefined::n) v)
labelAt :: forall l n . (HList l, CNum n, HLookup l n) => n -> Label St l (HAt l n)
labelAt _ = StLabel (\l -> lookup l (undefined::n)) 
                    (\l -> \v -> update l (undefined::n) v)
labelAt _ = StLabel (\l -> lookup l (undefined::n)) 
                    (\l -> \v -> update l (undefined::n) v)