- fresh >>= \tv->
- let given = foldr (->>) tv argTs in
- lift (unify expected given) >>= \s2->
- let fReturnType = subst s2 tv in
- foldM foldFieldSelectors fReturnType fs >>= \returnType ->
- pure (compose s2 s1, returnType)
+ fresh >>= \tv->case expected of
+ FuncType t = pure (s1, t)
+ _ = (let given = foldr (->>) tv argTs in
+ lift (unify expected given) >>= \s2->
+ let fReturnType = subst s2 tv in
+ foldM foldFieldSelectors fReturnType fs >>= \returnType ->
+ pure (compose s2 s1, returnType))