<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Mar 12, 2015 at 6:02 PM, Timothy Washington <span dir="ltr"><<a href="mailto:twashing@gmail.com" target="_blank">twashing@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">To get started, I'm trying to implement a simple <i>tictactoe</i> 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. <div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div>module Main where</div></div><div><div><br></div></div><div><div>data Piece = X | O</div></div><div><div>type Row = [Piece]</div></div><div><div>type Board = [Row]</div></div><div><div><br></div></div><div><div>-- put an X or O in a position</div></div><div><div>move :: Board -> Piece -> Board</div></div><div><div>move board piece = board</div></div><div><div>  </div></div><div><div>-- check win vertically</div></div><div><div>-- check win horizontally</div></div><div><div>-- check win diagonally</div></div><div><div><br></div></div><div><div>main :: IO ()</div></div><div><div>main = putStrLn "Hello World"</div></div></blockquote><div><br></div><div><br></div><div><b><i>A)</i></b> Now, I'd like to be able to <b><i>load code interactively</i></b>, preferably within emacs. However I don't have access to my types with <b><i>ghci</i></b> or <b><i>ghc-mod (Interactive-Haskell)</i></b>. In either case, this call fails with the below error.</div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><br></div></div><div><div>let p = Piece X</div></div><div><div><font color="#990000"><interactive>:20:9-13: Not in scope: data constructor `Piece'</font></div></div></blockquote></div></blockquote><div><br></div><div>Piece is the data TYPE. It has two constructors, X, and O. If you load your module into ghci, you can do ":t X" to get the type of X, which is Piece. You want to do "let p = X" here.</div><div><br></div><div>Check your mode docs while editing the haskell file. There should be  a command to load the current buffer into a ghci running in an interactive emacs buffer.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div><div><b><i>B)</i></b> And how do I make a <b><i>custom datatype</i></b> 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. </div></div></div></blockquote><div><br></div><div><br></div><div>As noted, you can derive "Show" so that Piece types print as "X" and "O". Similarly, you can derive "Read":</div><div><br></div><div>data Piece = X | O deriving (Show, Read)</div><div><br></div><div>so that you can then read "X" and get back an X when the context calls for a Piece value:</div><div>







<p class="">*Main> read "X" :: Piece</p>
<p class="">X</p></div><div><br></div><div>However, this isn't used a lot, as it tends to be slow and not very flexible for more complex types. For instance, it will let you read in lists of Pieces and lists of lists, but you'l lhave to use the list syntax,  not something that looks like an actual board when printed.</div><div><br></div></div></div></div>