I've been dabbling in writing a chess engine in Haskell for a while now. The main problem I am having is that a bitboard engine (the principle game representation is an array of fourteen 64 bit integers, one integer for every piece type, e.g. black bishop, white pawns) requires quick updating.
That is, I need to be able to non-patterned write and read an array really fast, at least at the assembly level. I used unsafe reads and writes to no avail. I'm not sure why it's so slow.
For those who are more experienced, is writing a mid strength or strong chess engine practical in Haskell? How about in idiomatic Haskell? I hear all the Haskell supporters saying that Haskell can do anything C can and almost just as fast, but I don't think I'll be convinced at least until a mid-strength chess engine is written.
What about in OCaml or a similar impure functional language?
Thanks for any answers.submitted by FrankAbagnaleSr
[link] [1 comment]
For me it's the type synonyms and newtype. In Java I end writing functions with signatures like "int(Collection<Pair<Integer, Integer>>, int)", which of course need all kinds of documentation so that I remember what they do in a week. If I could easily create new types, that signature could be "ReturnCode(Collection<Pair<EntryId, Count>>, RowId)" (I might not go that far, but you get the point).
Integer is final in Java, so if I wanted to make a new type, I would have to create a wrapper type with an int field and then access the int field every time I used the object. Drives me insane. And there's no way at all that I know of to create a synonym so that I can use either type interchangeably.submitted by dont_memoize_me_bro
[link] [13 comments]