I\'m new to Haskell and would like to know whether it\'s possible to define a function that is only defined on a subset of an already existing type, without actually having
No. The type system would need to support refinement types (or full dependent types, as suggested by @jozefg).
Here is a Haskell extension with refinement types.
http://goto.ucsd.edu/~rjhala/liquid/haskell/blog/blog/2013/01/01/refinement-types-101.lhs/