I quite appreciate the expressive power of Haskell, but of course it's quite useless for real applications. There's provocation for you! What I should say, is that it is too slow for my application, which is to play the ancient game of Chu Shogi (Middle Japanese Chess). Anyway, a problem has turned up that causes me to pose a challenge for computer science - to distinguish between good and bad taste. If you can crack that with Haskell, then I shall be really impressed. (it may be that these questions have already been solved - if so, please point me to a source, and I'll shut up). To fully appreciate the particular problem, then you need to learn to play Chu Shogi (download my my program from http://www.colina.demon.co.uk/chu.html to learn the easy way), but I can describe the nature of the problem in general terms, as follows: I was using the program to solve a mating problem (dated from 1746, and previously unsolved). The program (written in C++) solved the problem alright, (took about 12 hours on a 450MHz Pentium II), but included a move in the solution that is considered to be bad taste. To explain further, the convention is that the best defensive line in a mating problem, is that which delays mate for the longest possible number of moves. The computer is programmed to do just that. However, there is another convention that says you should not delay the mate simply by interposing with a piece that can be captured, with no other effect on the solution. This is considered bad taste. In some cases, it is rather hard for a human (well, me anyway, and I'm the European Champion at this game) to tell whether the interposition and capture has any other effect or not - but in this particular case it's very clear. Anyway, I don't know how to go about programming this, but if anyone is still reading: The problem concerned can be downloaded from the same web page (from C36.caf within the file C.zip). The solution follows (note (4) indicates the bad taste move). 1. +DK 8h - 6f, +DH x 6f (1) 2. Ln - 9f, +DH x 9f (2) 3. +DK - 6f, +DH x 6f (3) 4. FK - 12h, +DH - 10f (4) 5. FK x 10f, K - 9c 6. FK - 9e, K - 10c 7. +P - 10d, K - 11b 8. +P - 11c, K - 12a 9. +P - 12b Mate in 17. Notes: (1) if K - 9c, then 2. FK - 9l, K - 10c 3.+P - 10d, K - 11b (or K x 10d, Ln - 11f and Lion Mate follows) 4. +DK - 11f, K - 12a/b/c 5. FK - 12l Mate. if K - 7c, then 2. +DK 5g x 5e, C x 5e (or K - 6b, 3. +DK - 5c, K - 7c (not K - 6a as 4. FK - 2e then Mate) 4. +DK 6f - 5e, C x 5e 5. FK x 5e, K - 8d 6. Ln - 10f, K - 9c 7. FK - 9i and Lion Mate follows very swiftly) 3. +DK x 5e, K - 6b (not K - 8d as 4. Ln - 10f, K - 9d 5. FK - 9l etc.) 4. +DK - 5c, K - 7c (if K - 6a, 5. FK - 2e and Mate) 5. Ln - 10f, K - 9c 6. FK - 9l, K - 10c 6. Ln - 11d Mate (2) if K - 9c, then 3. Ln - 11d Mate if K - 7c, then 3. Ln - 9e, K - 6b 4. +DK - 5c, K - 6a 5. FK - 2e and Mate next move. (3) if K - 7c, then 4. FK - 12h and Mate follows. if K - 9c, then 4. +DK x 9f, K - 10c (if K - 8d, then 5. +DK - 9e Mate) 5. +P - 10d and Mate follows simply with FK and +DK. (4) Bad taste! -- Colin Paul Adams Preston Lancashire