Il Sat, Aug 26, 2006 at 06:00:02PM +0400, Bulat Ziganshin ebbe a scrivere: > type HashFunction = (String->Int) ... > createHash :: HashFunction -> IO Hash > and > createHash :: (String->Int) -> IO Hash > > are equivalent. So, technically speaking, you can't declare function > types, there is only one predefined type constructor that can > construct any function type you need. But from practical POV, you can > define synonyms for any function type you've constructed using '->'.
this possibility (POV) lead me to think it was possible to have a type constructor that could construct a function type. > Next point is that in Haskell functions are first-class values, i.e. > you can hold them in data structures, pass as parameters to other > functions and even return them as results. For example, the following > function accepts function of type String->Int->Int and returns > function of type (Int->Int): > > func :: (String->Int->Int) -> (Int->Int) > func f = f "" ok, I've got it. > Of course, newtype can also be used to define type whose only field > contains some function: > > newtype F = F (String->Int) > > Again, in this case language guarantees that internal F representation > will be the same as for plain (Int->String) function and therefore the > same as for type synonym: > > type S = String->Int > > But from programmer POV, the difference still holds: while S denotes > function of given type and can be used interchangeably with full > notion of this function type, F is just the type which internally > contains such function. As I said in a previous message it took me almost two day to grasp this distinction. > hope that it helps :) sure it does! thank you very mu! andrea _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe