Trying to understand if types imply OO and vice versa.

Questions:

  • What exactly is a type ?

  • Can a class in ruby be called a 'type'.

  • In javascript, the native functions/objects like Array,String,Function ... Are they types ?

  • Is a C struct a type ?

  • How is it that a language can be typed even when it doesn't support OO ? For e.g. Haskell. Is it that types in such langs are "data" types without behavior(methods) in objects/classes in OOPL ? What are the significant differences in types between langs that have types but no OO and langs that support OO.

  • If classes/objects are types, doesn't OO imply types ?

  • Can you have a type system without the typical hierarchies seen in OO langs ?

  • Since clojure supports type hints, can it be called typed in some sense? it is not statically typed.

  • Do the words 'untyped' and 'dynamically typed' mean the same thing ?

Edit
Report