[implement specialise using match rather than mgu
Helmut Grohne <grohne@cs.uni-bonn.de>**20150326085416
 Ignore-this: e03ffe1eff3e86719bf0a4b39e04a763
 
 When specialise is called, its first parameter is the result type of an
 application obtained from a type signature. Its second parameter is the type of
 a function or constructor looked up from the context. The difference between
 mgu and match here is that we forbid the function type to restrict the result
 type further, which makes sense as the user explicitly requested the result
 type using a type signature.
] hunk ./src/Syntax/UnifyTy.hs 34
-specialise t1 t2 =
-    (mgu (last . unArrowT $ t2) t1 >>= return . flip apply t2)
-     `catchError` \_ -> throwError . strMsg $ "Types not specialisable!"
+specialise t1 t2 = liftM (flip apply t2) (match t1 (last (unArrowT t2)))
+
