
To get started, I'm trying to implement a simple *tictactoe* game. And I would like to be able to represent a Piece on the board, as either the string "X" or "O". This is what I have so far. module Main where data Piece = X | O type Row = [Piece] type Board = [Row] -- put an X or O in a position move :: Board -> Piece -> Board move board piece = board -- check win vertically -- check win horizontally -- check win diagonally main :: IO () main = putStrLn "Hello World" *A)* Now, I'd like to be able to *load code interactively*, preferably within emacs. However I don't have access to my types with *ghci* or *ghc-mod (Interactive-Haskell)*. In either case, this call fails with the below error. let p = Piece X <interactive>:20:9-13: Not in scope: data constructor `Piece' *B)* And how do I make a *custom datatype* that's one of two strings (enumeration of either "X" or "O"). Cabal builds and runs the abouve code, so I know it can compile. But I'm confused as to where X or O is defined, and how I would supply it as an input. *C)* Finally, how do we update nested lists in Haskell. I want the move function to take a Board, Piece, and Position, and return a Board. I see some results from Hoogle https://www.haskell.org/hoogle/?hoogle=update. Is this where Lenses https://www.haskell.org/hoogle/?hoogle=lens or Zippers https://www.haskell.org/hoogle/?hoogle=zipper come into play? Thanks Tim Washington Interruptsoftware.com http://interruptsoftware.com