Strong Type Primitives

Add strong typing to primitives to avoid incorrect argument being passed and making your interfaces more obvious.