Indeed, they are both types, just like 42 and True are both values. But they are different "kinds" of type * -> * and * resp. You can get a static "compile time" kind error, which is like a type error "one level up" so to speak. i.e. the type annotations themselves are incoherent