Re: [Haskell-cafe] "Good" Java book? (not off-topic)

2012-02-17 Thread Álvaro García Pérez
I've always found Bruce Eckel's "Thinking in Java" the best introductory
book to the practice of object oriented programming and Java. There's a
sample online http://www.mindviewinc.com/TIJ4/BookSampleDownload.php

Whether this is in concordance with FP principles or not is a different
thing, but the point is to introduce OO and Java, isn't it? Anyway, I don't
think it's damaging if you later get to use Haskell and formal methods (I
went myself through that as well).

Cheers,
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Category Theory woes

2010-02-02 Thread Álvaro García Pérez
You may try Pierce's "Basic Category Theory for Computer Scientists" or
Awodey's "Category Theory", whose style is rather introductory. Both of them
(I think) have a chapter about functors where they explain the Hom functor
and related topics.

Alvaro.

2010/2/2 Mark Spezzano 

> I should probably add that I am trying various proofs that involve
> injective and surjective properties of Hom Sets and Hom functions.
>
> Does anyone know what Hom stands for?
>
> I need a text for a newbie.
>
> Mark
>
> On 02/02/2010, at 9:56 PM, Mark Spezzano wrote:
>
> > Hi all,
> >
> > I'm trying to learn Haskell and have come across Monads. I kind of
> understand monads now, but I would really like to understand where they come
> from. So I got a copy of Barr and Well's Category Theory for Computing
> Science Third Edition, but the book has really left me dumbfounded. It's a
> good book. But I'm just having trouble with the proofs in Chapter 1--let
> alone reading the rest of the text.
> >
> > Are there any references to things like "Hom Sets" and "Hom Functions" in
> the literature somewhere and how to use them? The only book I know that uses
> them is this one.
> >
> > Has anyone else found it frustratingly difficult to find details on
> easy-to-diget material on Category theory. The Chapter that I'm stuck on is
> actually labelled Preliminaries and so I reason that if I can't do this,
> then there's not much hope for me understanding the rest of the book...
> >
> > Maybe there are books on Discrete maths or Algebra or Set Theory that
> deal more with Hom Sets and Hom Functions?
> >
> > Thanks,
> >
> > Mark Spezzano.
> >
> > ___
> > Haskell-Cafe mailing list
> > Haskell-Cafe@haskell.org
> > http://www.haskell.org/mailman/listinfo/haskell-cafe
> >
> >
>
> ___
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Strict Monad

2009-11-04 Thread Álvaro García Pérez
Hi,

I'm trying to characterise some strict monads to work with a particular
lambda-calculus evaluator, as an alternative to CPS monad.

In the thread "Stupid question #852: Strict monad" the implementation of
some strict monads (and pseudo-monads, not meeting the identity laws) is
discussed. It's clear form that thread that using pattern-matching in the
(>>=) operation will force evaluation, then the Id monad defined with
pattern-matching is strict (and it's indeed a monad):

> newtype Id a = Id a
>
> instance Monad Id where
> return = Id
> (Id a) >>= f = f a

But it's impossible to derive a monad transformer from it, because you don't
know the constructors of the monads you're transforming. I then tried to use
strict application ($!). My first attempt was

> newtype Strict a = InSt { outSt :: a }
>
> instance Monad Strict where
> return = InSt
> m >>= f = (\x -> f x) $! (outSt m)

which is not a monad (doesn't meet the left identity law).

(return undefined) >>= (\x -> const (return 1) x)
=/=(return 1)

Then I wondered if it was enough to force the evaluation of the whole monad,
instead of the value inside the monad, yielding the second attempt:

> newtype Strict a = InSt { outSt :: a }
>
> instance Monad Strict where
> return = InSt
> m >>= f = (\x -> f (outSt x)) $! m

I placed the outSt inside the anonymous function, leaving the monad on the
right of the ($!). This meets the identity laws and surprisingly (I was
expecting a lazy behaviour) implements strict semantics (it behaves like
CPS, which is strict as well). A transformer from this monad can be easily
written:

> newtype StrictT m a = InStT { outStT :: m a }
>
> instance Monad m => Monad (StrictT m) where
> return = InStT . return
> m >>= t = InStT $ (\x -> x >>= (\a -> outStT $ t a)) $! (outStT m)
>
> instance MonadTrans StrictT where
> lift = InStT

Is it common practice to use this monad and this transformer? Why is it not
in the standard library? I looked for this monad in the literature but I
didn't find anything similar. It seems naive to me that this has never been
previously described. Am I doing something wrong and this is not a monad at
all?

Alvaro.
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe