I'm also new to Haskell, but I'm a C++/C# veteran, so I'll give it a shot. 

C#'s interfaces look a bit like Haskell's type classes. 

Although not exactly the same, you could try something like this:

-- C#: interface IX1 { String foo1(int); }
class IX1 obj where 
  foo1 :: Int -> obj -> String

-- C#: interface IX2<A> { String foo2(A); }
class IX2 obj a where 
  foo2 :: a -> obj -> String

--C#: interface IX3<A> where A : IY { String foo3(A); }
class IY a where {- ... -}
class IY a => IX3 obj a where 
  foo3 :: a -> obj -> String

--C#: interface IX4<A> : IZ where A : IY
class IZ a where {- ... -}
class (IY a, IZ obj) => IX4 obj a where
  foo4 :: a -> obj -> String

The C# "class" is called an "instance" in Haskell, so to implement an
interface, you would do e.g.

data X2 = X2 { x2Bla :: String, ... }
instance IX2 X2 String where
   foo2 s o = (x2Bla o) ++ s
   
This assumes your "objects" are immutable, otherwise you would have to
return (obj,String) instead of just String and then you most likely want to
use the state monad and "do notation" to make functional programming look
more like imperative programming.

You really have to drop the OO way of thinking, which I find the hardest :)
Haskell's type classes are more powerful in some sense than C# interfaces;
for example, in C# you can't attach an interface to any class (take for
example the Point struct), it has to be your own class, while in Haskell,
you can implement an instance of a type class for any datatype!

Hope this helps a bit. As I'm new myself to Haskell, so take this with a
"grain of salt".

Once you bite the bullet, I found Haskell a lot more fun than C#, although
C# of course comes with a gigantic .NET framework and tools...

Peter

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Nicholls, Mark
Sent: Wednesday, January 02, 2008 5:41 PM
To: haskell-cafe@haskell.org
Subject: [Haskell-cafe] Is there anyone out there who can translate C#
generics into Haskell?

I'm trying to translate some standard C# constucts into Haskell... some
of this seems easy....

Specifically

1) 

Interface IX
{
}

2)

Interface IX<A>
{
}

3)

Interface IX<A>
        Where A : IY
{
}

4)

Interface IX<A> : IZ
        Where A : IY
{
}


I can take a punt at the first 2....but then it all falls apart
_______________________________________________
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

Reply via email to