{-# LANGUAGE NamedFieldPuns #-} module Text.Takkyuu.Data ( ) where data Move a = Here a | Back data Reply a = Ok | No data Round a = Over Bool | On { move :: Move a , next :: Reply a -> Round a } fromList :: [a] -> Round a fromList [] = Over True fromList (a:as) = On { move = Here a , next } where next Ok = fromList as next _ = Over False