>From the previous discussion it has been brought to my attention that there is no much difference between
a -> b and data F a b = Blank a b -- "-> probably has a blank value constructor" Therefore it should be trivial to define a label initialized to a function abstraction without using the -> type constructor. I mean fun :: F Int Int fun ? = ? now what do I write in place of 1st and 2nd question marks? Even if I can do this, how am I suppose to invoke fun so that it would yield an "Int" not a "F Int Int"? Or maybe I should ask the following question: what would the "value constructor" of -> look like, theoretically? Thanks ----- Original Message ----- From: "Jon Fairbairn" <[EMAIL PROTECTED]> To: "Cagdas Ozgenc" <[EMAIL PROTECTED]> Cc: "Haskell Cafe List" <[EMAIL PROTECTED]> Sent: Thursday, June 06, 2002 12:39 AM Subject: Re: type equivalency > For example all functions with Int -> Int are type equivalent > However, > > data D a b = MkD a b All objects D Int Int are type equivalent. I'm not sure what your question means, otherwise. If you define data Function a b = F (a -> b) apply:: Function a b -> a -> b apply (F f) a = f a you add an extra level of constructor, but you can still use anything of type Function Int Int where Function Int Int is required: square:: Function Int Int square = F (\ a -> a*a) sqare_root:: Function Int Int square_root = F (\ a -> round (sqrt (fromIntegral a))) E&OE -- it's about my bedtime _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe
