The problem appears to be due to a v10.2 bug in the Dataset
visualization code that generates the box form of a dataset. It is not correctly distinguishing between Dataset
being used as a constructor function and Dataset
being used as the head of a constructed dataset. It assumes the latter case unconditionally, giving the exhibited messages for the former case.
As a work-around, we can temporarily block the errant definitions while we inspect toDataset
:
Block[{Dataset}, Information[toDataset]]

The defect appears to be a subtle interaction bug between Information
and Dataset
since expressions like the following do not exhibit the bug:
DownValues[toDataset]
(*
{HoldPattern[toDataset[table_List]]:>
Dataset[Association/@Function[r,(Thread[First[r]->#1]&)/@Rest[r]][table]]}
*)
Update
The problem is more general than within the context of Information
. Both of the following expressions also generate many warning messages:
Unevaluated @ Dataset @ (* ...expr from question... *)
Defer @ Dataset @ (* ...expr from question... *)
Furthermore, there appears to be an evaluation leak involved:
Unevaluated @ Dataset[Print["leak!"]]

Defer @ Dataset[Print["leak!"]]

This behaviour is very much like what happens with Graphics
objects. The front-end attempts to render them in output cells, which implies evaluation:
Defer@Graphics[Print["leak!"]]

We might just have to live with this behaviour in both cases (although a way to turn it off would be useful, just as the debugger allows for graphics).