Parsec(Haskell)わからないこといろいろ

show b::BinOp = bLeft b ++ bRight b ++ bOp b

って書いたらおこられた

  • 異なるクラスで同名のフィールドが定義できない
data Foo=Foo { a:: Int}
data Bar=Bar { a:: Int} 

を定義すると「a が2重定義」といわれる.

data Foo = Foo {a::Int} |  Bar {a::Int}

ならOK
しかし

data Foo = Foo {a::Int} |  Bar {a::String}

は,だめ.
まあ,aはフィールドじゃなくて関数だから仕方ないのはわかるけど,Java人間としてはフィールド的に扱いたい.いっそのこと foo.a とか書かせてほしいぐらい.