[[!comment format=mdwn username="joey" subject="""comment 2""" date="2016-04-13T16:14:46Z" content=""" There are a few things in your example that seem to reference other parts of your schroot module, which I don't have handy. But, I was able to add dummy versions of those (hopefully with close to the real types) and reproduce what looks like the same type errors. Let's first deal with "type variable x is ambiguous". Because if the type checker cannot infer a type, the other errors are not likely to be useful. So, the first of these involves the definition of `umount`, which uses `property`. And like it says in the transition guide: > Due to the polymorphic type returned by `property`, additional type > signatures tend to be needed when using it. So, write down the type of `umount` to fix this. umount :: Property Linux Next thing that stuck out to me is that two places are using `toChildProperty`. I'm at a bit of a loss to why, this is a new function that's a bit of an implementation detail, documented as "Gets a ChildProperty representing the Property. You should not normally need to use this." And indeed, you do not need to use it here. I simply removed it, and the types lined up without it, hurrah! With those fixes, my version of the code is compiling. schroot :: String -> Chroot -> RevertableProperty (HasInfo + DebianLike) DebianLike schroot sn chroot@(Chroot.Chroot chrootdir _ _) = (setup `requires` installed) cleanup where setup :: Property (HasInfo + DebianLike) setup = conf `requires` (provision `onChange` targz) where provision :: Property (HasInfo + DebianLike) provision = Chroot.provisioned chroot `before` umount where umount :: Property Linux umount = property ("umount " ++ chrootdir) $ do liftIO $ Mount.unmountBelow chrootdir return NoChange cleanup :: Property DebianLike cleanup = File.notPresent (schrootChrootD sn) `requires` File.notPresent tarball `requires` revert (Chroot.provisioned chroot) tarball = chrootdir <.> "tar.gz" -- dummy stuff added to make it compile as I don't have the real -- stuff handy. installed = undefined :: Property DebianLike conf = undefined :: Property DebianLike targz = undefined :: Property DebianLike schrootChrootD = undefined :: FilePath Hope this helps! BTW, looks like you also have a type error outside the code you showed, on line 98 of Sbuild.hs, which again looks to need the type of `property` to be explicitly specified to fix it. """]]