In the end I did newtype RTFixDescription a = RTFixDescription { unwrapRT :: ResizableTall a } deriving (Read, Show) instance LayoutClass RTFixDescription a where runLayout (W.Workspace t l s) = let ws' = W.Workspace t (unwrapRT l) s in fmap (fmap (fmap RTFixDescription)) . runLayout ws' handleMessage (RTFixDescription l) m = fmap (fmap RTFixDescription) $ handleMessage l m description (RTFixDescription l) = description l <> " " <> show (_nmaster l) And it works :) There are probably funny ways to make it pointfree but this works and I'm happy with it.