Yes. And raise a properly worded MLFailure exception otherwise.
Use the Bin constructor for all of those.
No. Put something reasonable/understandable.
Raise a properly worded MLFailure exception.
Nope.
Only if it is used in an ill-typed manner. For example let mixed = [1;false] is fine but (hd mixed) && true should throw an error.
Again, only if it is used in an ill-typed manner. For example let badIfUsed = map true is fine because it is never used, even though map expects a function but boolean foo is not a function. However, badIfUsed [1] should throw an error.