Prelude FmapFunc> let s = show :: ((->) Int) String
Prelude FmapFunc> :t s
s :: Int -> String
Prelude FmapFunc> let v = fmap ("hello " ++) s
Prelude FmapFunc> :t v
v :: Int -> String
Prelude FmapFunc> v 1
"hello 1"-- ryan On Tue, Aug 31, 2010 at 11:28 AM, michael rice <[email protected]> wrote: > I'm not sure if my terminology is correct or even if my question makes > sense, but I can create "instances" of Maybe, List, IO, and Either. > > Prelude Data.Either> let m = Just 7 > Prelude Data.Either> :t m > m :: Maybe Integer > > Prelude Data.Either> let l = 2:[] > Prelude Data.Either> :t l > l :: [Integer] > > Prelude Data.Either> let g = getLine > Prelude Data.Either> :t g > g :: IO String > > Prelude Data.Either> let e = Right "abc" > Prelude Data.Either> :t e > e :: Either a [Char] > > All these instances are functors, each with its own version of fmap that > can be applied to it. > > How can I similarly create an instance of (->) so I can apply (->)'s > version of fmap > > instance Functor ((->) r) where > fmap f g = (\x -> f (g x)) > > to it? > > > Michael > > --- On *Tue, 8/31/10, Vo Minh Thu <[email protected]>* wrote: > > > From: Vo Minh Thu <[email protected]> > Subject: Re: [Haskell-cafe] On to applicative > To: "michael rice" <[email protected]> > Cc: [email protected] > Date: Tuesday, August 31, 2010, 1:50 PM > > > 2010/8/31 michael rice > <[email protected]<http://mc/[email protected]> > > > > > > So it's a type constructor, not a type? Could you please provide a simple > example of its usage? > > Sure, although I'm sure you've come by some already. > > -- the identity function > id :: a -> a > -- often, we write it like this: > -- id x = x > -- but here we see the relationship between the ananymous function > syntax and the function type: > id = \x -> x > > In fact, if you write in prefix form, it is quite familiar: > f :: (->) Int Bool > e = Either String Float > > Cheers, > Thu > > > Michael > > > > --- On Tue, 8/31/10, Vo Minh Thu > > <[email protected]<http://mc/[email protected]>> > wrote: > > > > From: Vo Minh Thu <[email protected]<http://mc/[email protected]> > > > > Subject: Re: [Haskell-cafe] On to applicative > > To: "michael rice" > > <[email protected]<http://mc/[email protected]> > > > > Cc: [email protected]<http://mc/[email protected]> > > Date: Tuesday, August 31, 2010, 1:17 PM > > > > 2010/8/31 michael rice > > <[email protected]<http://mc/[email protected]> > > > > > > > > "Learn You a Haskell ..." says that (->) is a type just like Either. > Where can I find its type definition? > > > > You can't define it *in* Haskell as user code. It is a built-in infix > > type constructor (Either or Maybe are type constructors too, not just > > types). In fact, if you want to implement a simple, typed functional > > language, you'll find it is the only built-in type constructor you > > have to implement (as the implementor of the language). > > > > Also, > > Show a => a > > is a type too, but you won't find a definition for 'a' or for '=>'. > > All those things are defined by the language. > > > > Cheers, > > Thu > > > > > > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe > >
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
