Paluu Haskelliin, osa 2

Edellisessä osassa asensin Haskell-tulkin ja ajoin ensim­mäiset koodin­pätkät. Tässä osassa aion aloittaa šakki­pelin toteu­tuksen. Aloitan pois­tamalla Chess.hs-tiedos­tosta kaiken paitsi ensim­mäisen rivin, module Chess where.

En ole vielä miettinyt, miten rakennan ohjelman. Aloi­te­taan jos­tain: määri­tetään tieto­tyypit laudalle, laudan ruuduille (jotka voivat olla joko tyhjiä tai varattuja) sekä nap­pu­loille (joilla on väri sekä tyyppi).

data PieceType = Pawn | Bishop | Rook | Knight | Queen | King
  deriving Show
data Piece = Black PieceType | White PieceType
  deriving Show
data Square = EmptySquare | Piece
  deriving Show

Tai jotain, toi ei kai tuu toimimaan.

Laudan ei kai tarvitse välttämättä olla edes kon­kreet­tinen asia, oma tieto­raken­teensa. Jos tiedämme kaikkien nappu­loiden sijain­nit, ja tie­dämme muu­taman bitin pelin ku­lus­ta (onko torni­tusta tapah­tunut, onko ohesta­lyönti (en passant) mah­dol­linen nyt), niin meillä on kaikki tarvit­tava tieto pelin simu­lointiin ja laske­miseen; jos lautaa tarvi­taan, voidaan se rakentaa tarpeen mukaan ja unohtaa jäl­keen­päin. Kun aiomme siir­tää nap­pu­laa, esi­mer­kiksi tornia, on meidän toki tar­kis­tet­tava sen rivin ja sarak­keen ruu­dut, joihin torni voisi siirtyä, muiden nap­pu­loiden varalta. Jos nap­pu­lamme oli­sivat muis­tissa lau­dalla, ja lauta olisi jär­jes­tetty juuri oike­alla tavalla, voi bitti­mani­pu­laa­tio­magi­alla tar­kistaa ne ≈32 ruutua, joi­hin nap­pula voisi ylettyä, mutta jos lautaa ei ole niin ainoa vaihto­ehto on tar­kistaa kaik­kien ≤32 nap­pulan sijain­nit... mutta meillä on tieto­kone, tämä­kään ei ole ongelma. (Usein ajat­telen kuin ih­minen, joka voi sil­mil­lään vil­kaista ylös ja alas pitkin sarak­keita, mutta proses­soril­lahan ei ole silmiä.)