}, true);
DataModel::RegisterType("Int", function ($d) {
    return (int) $d;
}, function ($d, $c) {
    $d = $c($d);
    return is_numeric($d);
});
DataModel::RegisterType("UnsignedInt", function ($d) {
    return (int) $d;
}, function ($d, $c) {
    $d = $c($d);
    return is_numeric($d) && $d >= 0;
});
DataModel::RegisterTypeAs("ForeignKey", "UnsignedInt");
DataModel::RegisterTypeAs("Timestamp", "UnsignedInt");
DataModel::RegisterTypeAs("Rank", "UnsignedInt");
DataModel::RegisterType("Float", function ($d) {
    return (double) $d;
}, function ($d, $c) {
    $d = $c($d);
    return is_float($d);
});
DataModel::RegisterType("UnsignedFloat", function ($d) {
    return (double) $d;
}, function ($d, $c) {
    return is_numeric($d) && is_float($c($d)) && $c($d) >= 0;
});
DataModel::RegisterType("String", function ($d) {
    return (string) $d;
}, function ($d, $c) {
    $d = $c($d);