如何将以下Java实现转换为Haskell?
主要目的是创建一个列表,其中包含特定接口的各种子元素。
我试图在下面制作Haskell版本,但未能达到我的目的。
关键在于xs
的类型为[Bar]
而不是Foo a => [a]
这意味着Haskell不能完成此操作,我应该用另一种方式思考吗?
Java
interface Foo {
void bar ();
}
public class Bar1 implements Foo {
@Override
public void bar() {
System.out.println("I am bar 1 class");
}
}
public class Bar2 implements Foo {
@Override
public void bar() {
System.out.println("I am bar 2 class");
}
}
public static void main(String[] args) {
// The major purpose here is having a list
// that contains elements which are sub-type of "Foo"
List<Foo> ys = new ArrayList<Foo>();
Foo e1 = new Bar1();
Foo e2 = new Bar2();
ys.add(e1);
ys.add(e2);
for (Foo foo : ys) {
foo.bar();
}
}
Haskell
class Foo a where
bar :: a -> IO ()
data Bar = Bar1 | Bar2
instance Foo Bar where
bar Bar1 = print "I am Bar1"
bar Bar2 = print "I am Bar2"
--xs :: Foo a => [a]
xs :: [Bar]
xs = [Bar1, Bar2]
main :: IO ()
main = mapM_ bar xs
bar1 = "我是 Bar1"; bar2 = "我是 Bar2"; xs = [bar1, bar2]; main = mapM_ putStrLn xs
。 - kosmikusString
类型或者可能是IO String
类型。 - kosmikus