What is a type ?
a type is a name for a colletion of related values.
for example , in haskell the basic type
Bool
contains the two logical values:
False True
----
all type errors are found at compile time , which makes programs safer and faster by removing the need for type checks at run time.
----
List Types
a list is sequence of values of the same type.
----
Tuple Types
a typle is a sequence of vaues of different type.
----
Function Types
a function is a mapping from values of one type to values of another type.
Func<T> => () -> T
Func<S,T> => S -> T
Action<T> => T-> IO()
如果一个函数的参数是必须同时需要的,那么就用tuple 如果不是必须的同时接受,那么就可以应用curry 技术。e.g.
add (x,y) = x+y
add = \(x,y) -> x+y
add' x y = x+y
add' = \ x y -> x+y
Functions that take their arguments one at a time are called curried functions ,celebrating the work of Haskell Curry on such functions.
Why is Currying Useful ?
Curried functions are more flexible than functions on tuples ,because useful functions can often be made by partially applying a curried function.
Polymorphic Functions (generic function in c# )
a function is called polymorphic ("of many forms ") if its type contains one or more type variables.
zip:: ([a],[b])->[(a,b)]
IE..<R> Zip<T,S,R> ( IE..<T> xs,IE..<S> ys ,Func<T,S,R> f)
type Class
sum:: Num a => [a] -> a
note: Constrained type variables can be instantiated to any types that satisfy the constraints
sum [1,2,3]
sum [1.1,2.2,3.3]
sum ['a','b','c'] error!
in c# Num can be interface.