Commit 4a85ae1b by partain

### [project @ 1996-07-25 21:02:03 by partain]

`Bulk of final changes for 2.01`
parent 51c80c6c
 --!!! conversions: Double <=> Rational/Integer things -- main _ = [AppendChan stdout (show r42 ++ "\n" ++ show nu42 ++ ", " ++ show de42 ++ "\n" ++ show nu42d ++ ", " ++ show de42d ++ "\n" ++ show s2 ++ ", " ++ show e2 ++ "\n" ++ show s ++ ", " ++ show e ++ "\n" ) ] import Ratio main = putStr (show r42 ++ "\n" ++ show nu42 ++ ", " ++ show de42 ++ "\n" ++ show nu42d ++ ", " ++ show de42d ++ "\n" ++ show s2 ++ ", " ++ show e2 ++ "\n" ++ show s ++ ", " ++ show e ++ "\n" ) where d42 :: Double r42 :: Rational ... ...
 --!!! basic Rational operations -- main _ = [AppendChan stdout import Ratio main = putStr (-- Ratio Ints show [i0a, i0b, i0c, i2a, i2b, im2a, im2b, i_pi, i_misc] ++ "\n" ... ... @@ -24,7 +26,6 @@ main _ -- ++ show [] -- ++ "\n" ) ] where i0a, i0b, i0c, i2a, i2b, im2a, im2b, i_pi, i_misc :: Ratio Int ... ...
 --!!! test arithmetic operations from "Prelude" (gcd, ldm, etc.) -- main _ = [AppendChan stdout main = let minInt = minBound :: Int maxInt = maxBound :: Int in putStr (-- w/ Ints show [ minInt, maxInt, ... ... @@ -62,7 +66,7 @@ main _ -- ToDo: more stuff ] ++ "\n" )] ) where i0, i4, i4m, i6, i6m, i8, i8m :: Int i0 = 0 ... ...
 --!!! test quot/rem/div/mod functions on Ints and Integers -- main _ = [AppendChan stdout main = putStr (-- w/ Ints and Integers show (unzipWith div ints_list) ++ "\n" ... ... @@ -27,7 +27,7 @@ main _ ++ "\n" ++ show (unzipWith law2 integers_list) ++ "\n" )] ) where ints_list :: [(Int, Int)] integers_list :: [(Integer, Integer)] ... ...
 --!!! test RealFrac ops (ceiling/floor/etc.) on Floats/Doubles -- main _ = [AppendChan stdout main = putStr (-- {Float,Double} inputs, {Int,Integer} outputs show ((map ceiling float_list) :: [Int]) ++ "\n" ... ... @@ -43,7 +43,7 @@ main _ ++ "\n" ++ show ((map properFraction double_list) :: [(Integer,Double)]) ++ "\n" )] ) where float_list :: [Float] double_list :: [Double] ... ...
 42.0000000 \ No newline at end of file 42.0000000
 --!!! test simple Integer things -- main _ = [AppendChan stdout (shows integer_list "\n")] main = putStr (shows integer_list "\n") where int_list :: [Int] integer_list :: [Integer] ... ...
 ... ... @@ -14,7 +14,7 @@ random_numbers (s1,s2,s3) -- partain: changed to cvt spaces into newlines (easier to see bugs) main = appendChan stdout (map cvt (shows (take 1000 (random_numbers (9807, 65, 32975))) "\n")) exit done main = putStr (map cvt (shows (take 1000 (random_numbers (9807, 65, 32975))) "\n")) where cvt ' ' = '\n' cvt c = c
 NoFibOneModuleCompileAndRun(arith009,)
 -- a prefix minus precedence test f :: Int -> Int -> Int -> Int f x y z = - x * y ^ z main = putStr (shows (f 5 2 3) "\n")
 -40
 main _ = [AppendChan stdout (shows a "\n")] import Array -- 1.3 infix 1 =: (=:) a b = (a,b) main = putStr (shows a "\n") where a :: Array Integer Integer a = array (1,100) ((1 := 1) : [i := i * a!(i-1) | i <- [2..100]]) a = array (1,100) ((1 =: 1) : [i =: i * a!(i-1) | i <- [2..100]])
 array (1, 100) [1 := 1, 2 := 2, 3 := 6, 4 := 24, 5 := 120, 6 := 720, 7 := 5040, 8 := 40320, 9 := 362880, 10 := 3628800, 11 := 39916800, 12 := 479001600, 13 := 6227020800, 14 := 87178291200, 15 := 1307674368000, 16 := 20922789888000, 17 := 355687428096000, 18 := 6402373705728000, 19 := 121645100408832000, 20 := 2432902008176640000, 21 := 51090942171709440000, 22 := 1124000727777607680000, 23 := 25852016738884976640000, 24 := 620448401733239439360000, 25 := 15511210043330985984000000, 26 := 403291461126605635584000000, 27 := 10888869450418352160768000000, 28 := 304888344611713860501504000000, 29 := 8841761993739701954543616000000, 30 := 265252859812191058636308480000000, 31 := 8222838654177922817725562880000000, 32 := 263130836933693530167218012160000000, 33 := 8683317618811886495518194401280000000, 34 := 295232799039604140847618609643520000000, 35 := 10333147966386144929666651337523200000000, 36 := 371993326789901217467999448150835200000000, 37 := 13763753091226345046315979581580902400000000, 38 := 523022617466601111760007224100074291200000000, 39 := 20397882081197443358640281739902897356800000000, 40 := 815915283247897734345611269596115894272000000000, 41 := 33452526613163807108170062053440751665152000000000, 42 := 1405006117752879898543142606244511569936384000000000, 43 := 60415263063373835637355132068513997507264512000000000, 44 := 2658271574788448768043625811014615890319638528000000000, 45 := 119622220865480194561963161495657715064383733760000000000, 46 := 5502622159812088949850305428800254892961651752960000000000, 47 := 258623241511168180642964355153611979969197632389120000000000, 48 := 12413915592536072670862289047373375038521486354677760000000000, 49 := 608281864034267560872252163321295376887552831379210240000000000, 50 := 30414093201713378043612608166064768844377641568960512000000000000, 51 := 1551118753287382280224243016469303211063259720016986112000000000000, 52 := 80658175170943878571660636856403766975289505440883277824000000000000, 53 := 4274883284060025564298013753389399649690343788366813724672000000000000, 54 := 230843697339241380472092742683027581083278564571807941132288000000000000, 55 := 12696403353658275925965100847566516959580321051449436762275840000000000000, 56 := 710998587804863451854045647463724949736497978881168458687447040000000000000, 57 := 40526919504877216755680601905432322134980384796226602145184481280000000000000, 58 := 2350561331282878571829474910515074683828862318181142924420699914240000000000000, 59 := 138683118545689835737939019720389406345902876772687432540821294940160000000000000, 60 := 8320987112741390144276341183223364380754172606361245952449277696409600000000000000, 61 := 507580213877224798800856812176625227226004528988036003099405939480985600000000000000, 62 := 31469973260387937525653122354950764088012280797258232192163168247821107200000000000000, 63 := 1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000, 64 := 126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000, 65 := 8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000, 66 := 544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000, 67 := 36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000, 68 := 2480035542436830599600990418569171581047399201355367672371710738018221445712183296000000000000000, 69 := 171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000, 70 := 11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000, 71 := 850478588567862317521167644239926010288584608120796235886430763388588680378079017697280000000000000000, 72 := 61234458376886086861524070385274672740778091784697328983823014963978384987221689274204160000000000000000, 73 := 4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000000, 74 := 330788544151938641225953028221253782145683251820934971170611926835411235700971565459250872320000000000000000, 75 := 24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424000000000000000000, 76 := 1885494701666050254987932260861146558230394535379329335672487982961844043495537923117729972224000000000000000000, 77 := 145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000, 78 := 11324281178206297831457521158732046228731749579488251990048962825668835325234200766245086213177344000000000000000000, 79 := 894618213078297528685144171539831652069808216779571907213868063227837990693501860533361810841010176000000000000000000, 80 := 71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000, 81 := 5797126020747367985879734231578109105412357244731625958745865049716390179693892056256184534249745940480000000000000000000, 82 := 475364333701284174842138206989404946643813294067993328617160934076743994734899148613007131808479167119360000000000000000000, 83 := 39455239697206586511897471180120610571436503407643446275224357528369751562996629334879591940103770870906880000000000000000000, 84 := 3314240134565353266999387579130131288000666286242049487118846032383059131291716864129885722968716753156177920000000000000000000, 85 := 281710411438055027694947944226061159480056634330574206405101912752560026159795933451040286452340924018275123200000000000000000000, 86 := 24227095383672732381765523203441259715284870552429381750838764496720162249742450276789464634901319465571660595200000000000000000000, 87 := 2107757298379527717213600518699389595229783738061356212322972511214654115727593174080683423236414793504734471782400000000000000000000, 88 := 185482642257398439114796845645546284380220968949399346684421580986889562184028199319100141244804501828416633516851200000000000000000000, 89 := 16507955160908461081216919262453619309839666236496541854913520707833171034378509739399912570787600662729080382999756800000000000000000000, 90 := 1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000, 91 := 135200152767840296255166568759495142147586866476906677791741734597153670771559994765685283954750449427751168336768008192000000000000000000000, 92 := 12438414054641307255475324325873553077577991715875414356840239582938137710983519518443046123837041347353107486982656753664000000000000000000000, 93 := 1156772507081641574759205162306240436214753229576413535186142281213246807121467315215203289516844845303838996289387078090752000000000000000000000, 94 := 108736615665674308027365285256786601004186803580182872307497374434045199869417927630229109214583415458560865651202385340530688000000000000000000000, 95 := 10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000, 96 := 991677934870949689209571401541893801158183648651267795444376054838492222809091499987689476037000748982075094738965754305639874560000000000000000000000, 97 := 96192759682482119853328425949563698712343813919172976158104477319333745612481875498805879175589072651261284189679678167647067832320000000000000000000000, 98 := 9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000000, 99 := 933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000, 100 := 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000] array (1, 100) [(1, 1), (2, 2), (3, 6), (4, 24), (5, 120), (6, 720), (7, 5040), (8, 40320), (9, 362880), (10, 3628800), (11, 39916800), (12, 479001600), (13, 6227020800), (14, 87178291200), (15, 1307674368000), (16, 20922789888000), (17, 355687428096000), (18, 6402373705728000), (19, 121645100408832000), (20, 2432902008176640000), (21, 51090942171709440000), (22, 1124000727777607680000), (23, 25852016738884976640000), (24, 620448401733239439360000), (25, 15511210043330985984000000), (26, 403291461126605635584000000), (27, 10888869450418352160768000000), (28, 304888344611713860501504000000), (29, 8841761993739701954543616000000), (30, 265252859812191058636308480000000), (31, 8222838654177922817725562880000000), (32, 263130836933693530167218012160000000), (33, 8683317618811886495518194401280000000), (34, 295232799039604140847618609643520000000), (35, 10333147966386144929666651337523200000000), (36, 371993326789901217467999448150835200000000), (37, 13763753091226345046315979581580902400000000), (38, 523022617466601111760007224100074291200000000), (39, 20397882081197443358640281739902897356800000000), (40, 815915283247897734345611269596115894272000000000), (41, 33452526613163807108170062053440751665152000000000), (42, 1405006117752879898543142606244511569936384000000000), (43, 60415263063373835637355132068513997507264512000000000), (44, 2658271574788448768043625811014615890319638528000000000), (45, 119622220865480194561963161495657715064383733760000000000), (46, 5502622159812088949850305428800254892961651752960000000000), (47, 258623241511168180642964355153611979969197632389120000000000), (48, 12413915592536072670862289047373375038521486354677760000000000), (49, 608281864034267560872252163321295376887552831379210240000000000), (50, 30414093201713378043612608166064768844377641568960512000000000000), (51, 1551118753287382280224243016469303211063259720016986112000000000000), (52, 80658175170943878571660636856403766975289505440883277824000000000000), (53, 4274883284060025564298013753389399649690343788366813724672000000000000), (54, 230843697339241380472092742683027581083278564571807941132288000000000000), (55, 12696403353658275925965100847566516959580321051449436762275840000000000000), (56, 710998587804863451854045647463724949736497978881168458687447040000000000000), (57, 40526919504877216755680601905432322134980384796226602145184481280000000000000), (58, 2350561331282878571829474910515074683828862318181142924420699914240000000000000), (59, 138683118545689835737939019720389406345902876772687432540821294940160000000000000), (60, 8320987112741390144276341183223364380754172606361245952449277696409600000000000000), (61, 507580213877224798800856812176625227226004528988036003099405939480985600000000000000), (62, 31469973260387937525653122354950764088012280797258232192163168247821107200000000000000), (63, 1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000), (64, 126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000), (65, 8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000), (66, 544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000), (67, 36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000), (68, 2480035542436830599600990418569171581047399201355367672371710738018221445712183296000000000000000), (69, 171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000), (70, 11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000), (71, 850478588567862317521167644239926010288584608120796235886430763388588680378079017697280000000000000000), (72, 61234458376886086861524070385274672740778091784697328983823014963978384987221689274204160000000000000000), (73, 4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000000), (74, 330788544151938641225953028221253782145683251820934971170611926835411235700971565459250872320000000000000000), (75, 24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424000000000000000000), (76, 1885494701666050254987932260861146558230394535379329335672487982961844043495537923117729972224000000000000000000), (77, 145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000), (78, 11324281178206297831457521158732046228731749579488251990048962825668835325234200766245086213177344000000000000000000), (79, 894618213078297528685144171539831652069808216779571907213868063227837990693501860533361810841010176000000000000000000), (80, 71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000), (81, 5797126020747367985879734231578109105412357244731625958745865049716390179693892056256184534249745940480000000000000000000), (82, 475364333701284174842138206989404946643813294067993328617160934076743994734899148613007131808479167119360000000000000000000), (83, 39455239697206586511897471180120610571436503407643446275224357528369751562996629334879591940103770870906880000000000000000000), (84, 3314240134565353266999387579130131288000666286242049487118846032383059131291716864129885722968716753156177920000000000000000000), (85, 281710411438055027694947944226061159480056634330574206405101912752560026159795933451040286452340924018275123200000000000000000000), (86, 24227095383672732381765523203441259715284870552429381750838764496720162249742450276789464634901319465571660595200000000000000000000), (87, 2107757298379527717213600518699389595229783738061356212322972511214654115727593174080683423236414793504734471782400000000000000000000), (88, 185482642257398439114796845645546284380220968949399346684421580986889562184028199319100141244804501828416633516851200000000000000000000), (89, 16507955160908461081216919262453619309839666236496541854913520707833171034378509739399912570787600662729080382999756800000000000000000000), (90, 1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000), (91, 135200152767840296255166568759495142147586866476906677791741734597153670771559994765685283954750449427751168336768008192000000000000000000000), (92, 12438414054641307255475324325873553077577991715875414356840239582938137710983519518443046123837041347353107486982656753664000000000000000000000), (93, 1156772507081641574759205162306240436214753229576413535186142281213246807121467315215203289516844845303838996289387078090752000000000000000000000), (94, 108736615665674308027365285256786601004186803580182872307497374434045199869417927630229109214583415458560865651202385340530688000000000000000000000), (95, 10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000), (96, 991677934870949689209571401541893801158183648651267795444376054838492222809091499987689476037000748982075094738965754305639874560000000000000000000000), (97, 96192759682482119853328425949563698712343813919172976158104477319333745612481875498805879175589072651261284189679678167647067832320000000000000000000000), (98, 9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000000), (99, 933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000), (100, 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000)]
 main _ = [AppendChan stdout (shows sub_b "\n")] import Ratio -- 1.3 import Array -- 1.3 infix 1 =: (=:) a b = (a,b) main = putStr (shows sub_b "\n") where sub_b :: Array Int Double sub_b = ixmap (102, 113) id b ... ... @@ -8,5 +13,5 @@ main _ = [AppendChan stdout (shows sub_b "\n")] (ixmap (101,200) (\ i -> toInteger i - 100) a) a :: Array Integer (Ratio Integer) a = array (1,100) ((1 := 1) : [i := fromInteger i * a!(i-1) a = array (1,100) ((1 =: 1) : [i =: fromInteger i * a!(i-1) | i <- [2..100]])
 array (102, 113) [102 := 6.3661977236758138e-1, 103 := 1.9098593171027440, 104 := 7.6394372684109761, 105 := 38.197186342054884, 106 := 229.18311805232929, 107 := 1604.2818263663050, 108 := 12834.254610930440, 109 := 115508.29149837396, 110 := 1155082.9149837396, 111 := 12705912.064821135, 112 := 152470944.77785364, 113 := 1982122282.1120973] array (102, 113) [(102, 6.3661977236758138e-1), (103, 1.9098593171027440), (104, 7.6394372684109761), (105, 38.197186342054884), (106, 229.18311805232929), (107, 1604.2818263663050), (108, 12834.254610930440), (109, 115508.29149837396), (110, 1155082.9149837396), (111, 12705912.064821135), (112, 152470944.77785364), (113, 1982122282.1120973)]
 ... ... @@ -26,5 +26,5 @@ where { f_foldr a_op a_r []=a_r; f_foldr a_op a_r (a_a:a_x)=a_op a_a (f_foldr a_op a_r a_x); f_map a_f a_x=[a_f a_a|a_a<-a_x]; main r = [AppendChan "stdout" (f_main c_input)] main = putStr (f_main c_input) }
 These are bug-programs (fixed) that I haven't turned into tests yet. Will
 val1 :: Array Int Int val1 = array (12,10) [] main = print [val1 == val1]
 main = prints (exponent (2.0 :: Float), significand (2.0 :: Float), exponent (2.0 :: Double),significand (2.0 :: Double)) "\n"
 > module DataTypes where > import GenUtils > import Array -- 1.3 > import Ix > import Char > infix 1 =: -- 1.3 > (=:) a b = (a,b) %------------------------------------------------------------------------------ ... ... @@ -81,8 +86,8 @@ Now the ranks and files. > userFormatExBoardPos (Just f,Nothing) = userFormatFile f > userFormatExBoardPos (Nothing,Just r) = userFormatRank r > userFormatExBoardPos _ = "" > userFormatRank r = [chr (r + 48)] > userFormatFile f = [chr (f + 96)] > userFormatRank r = [toEnum (r + 48)] > userFormatFile f = [toEnum (f + 96)] %------------------------------------------------------------------------------ ... ... @@ -243,9 +248,9 @@ These are the components of a move. > getOpening eco@[a,b,c] | a >= 'A' && a <= 'E' && isDigit b && isDigit c > = getOpenName ((ord a - ord 'A') * 100 > + (ord b - ord '0') * 10 > + (ord c - ord '0')) ++ " " ++ eco > = getOpenName ((fromEnum a - fromEnum 'A') * 100 > + (fromEnum b - fromEnum '0') * 10 > + (fromEnum c - fromEnum '0')) ++ " " ++ eco > getOpening other = other > getOpenName :: Int -> String ... ... @@ -549,7 +554,7 @@ This uses forsyth notation. > buildBoard :: String -> Board > buildBoard str = Board brd initMoveNumber Nothing > where > brd = array boardSize (zipWith (:=) allSq (mkPieces str)) > brd = array boardSize (zipWith (=:) allSq (mkPieces str)) > allSq = [ (x,y) | y <- reverse [1..8::Int],x <- [1..8::Int]] > mkPieces :: String -> [BoardSquare] > mkPieces (hd:rest) | hd `elem` "KQRNBPkqrnbp" = pc : mkPieces rest ... ...
 ... ... @@ -33,10 +33,11 @@ All the code below is understood to be in the public domain. > combinePairs, > formatText ) where > import Array -- 1.3 > import Ix -- 1.3 >#ifndef __GLASGOW_HASKELL__ > import {-fool mkdependHS-} > Maybe (Maybe(..)) > import {-fool mkdependHS-} > Trace ... ... @@ -49,9 +50,12 @@ HBC has it in one of its builtin modules >#if defined(__GLASGOW_HASKELL__) || defined(__GOFER__) > data Maybe a = Nothing | Just a deriving (Eq,Ord,Text) > --in 1.3: data Maybe a = Nothing | Just a deriving (Eq,Ord,Text) >#endif > infix 1 =: -- 1.3 > type Assoc a b = (a,b) -- 1.3 > (=:) a b = (a,b) > mapMaybe :: (a -> Maybe b) -> [a] -> [b] > mapMaybe f [] = [] ... ... @@ -87,7 +91,7 @@ This version returns nothing, if *any* one fails. > joinMaybe _ Nothing (Just g) = Just g > joinMaybe f (Just g) (Just h) = Just (f g h) > data MaybeErr a err = Succeeded a | Failed err deriving (Eq,Text) > data MaybeErr a err = Succeeded a | Failed err deriving (Eq,Show{-was:Text-}) @mkClosure@ makes a closure, when given a comparison and iteration loop. Be careful, because if the functional always makes the object different, ... ... @@ -214,15 +218,15 @@ Note again the use of partiual application. > arrCond bds pairs fnPairs def = (!) arr' > where > arr' = array bds [ t := head > ([ r | (p := r) <- pairs, elem t p ] ++ > [ r | (f := r) <- fnPairs, f t ] ++ > arr' = array bds [ t =: head > ([ r | (p, r) <- pairs, elem t p ] ++ > [ r | (f, r) <- fnPairs, f t ] ++ > [ def ]) > | t <- range bds ] > memoise :: (Ix a) => (a,a) -> (a -> b) -> a -> b > memoise bds f = (!) arr > where arr = array bds [ t := f t | t <- range bds ] > where arr = array bds [ t =: f t | t <- range bds ] Quite neat this. Formats text to fit in a column. ... ...
 ... ... @@ -2,6 +2,7 @@ > import GenUtils > import DataTypes > import Array -- 1.3 %------------------------------------------------------------------------------ ... ... @@ -155,7 +156,7 @@ Now filter out the moves it *cant* be. > -> [(Piece,ChessFile,ChessRank)] > getCurrPieces (Board arr (MoveNumber _ col) _) pc corr_file = > [ (p,x,y) | > ((x,y) := r) <- assocs arr, > ((x,y), r) <- assocs arr, > lookupSquare col r == Friendly, > (Just p) <- [getSquarePiece r], > p == pc, ... ... @@ -285,24 +286,24 @@ ToDo: add en-passant > makeAMove :: Board -> PlayMove -> Board > makeAMove board@(Board brd mv@(MoveNumber _ col) _) > move@(PlayMove piece pos pos' NothingSpecial) = > Board (brd // [ pos := VacantSq, > pos' := mkColBoardSq col piece ]) > Board (brd // [ pos =: VacantSq, > pos' =: mkColBoardSq col piece ]) > (incMove mv) Nothing > makeAMove board@(Board brd mv@(MoveNumber _ col) _) > move@(PlayMove piece pos@(f,_) pos' BigPawnMove) = > Board (brd // [ pos := VacantSq, > pos' := mkColBoardSq col piece ]) > Board (brd // [ pos =: VacantSq, > pos' =: mkColBoardSq col piece ]) > (incMove mv) (Just f) > makeAMove board@(Board brd mv@(MoveNumber _ col) _) > move@(PlayMove piece pos@(f,_) pos' (Queening q)) = > Board (brd // [ pos := VacantSq, > pos' := mkColBoardSq col q]) > Board (brd // [ pos =: VacantSq, > pos' =: mkColBoardSq col q]) > (incMove mv) (Just f) > makeAMove board@(Board brd mv@(MoveNumber _ col) _) -- ASSERT ? > move@(PlayMove piece (f,_) (f',_) EnPassant) = > Board (brd // [ (f,st) := VacantSq, > (f',fn) := mkColBoardSq col Pawn, > (f',st) := VacantSq ]) > Board (brd // [ (f,st) =: VacantSq, > (f',fn) =: mkColBoardSq col Pawn, > (f',st) =: VacantSq ]) > (incMove mv) Nothing > where (st,fn) = case col of > White -> (5,6) ... ... @@ -310,29 +311,29 @@ ToDo: add en-passant > makeACastleK (Board brd mv@(MoveNumber _ White) _) = > Board (brd // > [ (5,1) := VacantSq, > (6,1) := mkColBoardSq White Rook, > (7,1) := mkColBoardSq White King, > (8,1) := VacantSq ]) (incMove mv) Nothing > [ (5,1) =: VacantSq, > (6,1) =: mkColBoardSq White Rook, > (7,1) =: mkColBoardSq White King, > (8,1) =: VacantSq ]) (incMove mv) Nothing > makeACastleK (Board brd mv@(MoveNumber _ Black) _) = > Board (brd // > [ (5,8) := VacantSq, > (6,8) := mkColBoardSq Black Rook, > (7,8) := mkColBoardSq Black King, > (8,8) := VacantSq ]) (incMove mv) Nothing > [ (5,8) =: VacantSq, > (6,8) =: mkColBoardSq Black Rook, > (7,8) =: mkColBoardSq Black King, > (8,8) =: VacantSq ]) (incMove mv) Nothing > makeACastleQ (Board brd mv@(MoveNumber _ White) _) = > Board (brd // > [ (5,1) := VacantSq, > (4,1) := mkColBoardSq White Rook, > (3,1) := mkColBoardSq White King, > (1,1) := VacantSq ]) (incMove mv) Nothing > [ (5,1) =: VacantSq, > (4,1) =: mkColBoardSq White Rook, > (3,1) =: mkColBoardSq White King, > (1,1) =: VacantSq ]) (incMove mv) Nothing > makeACastleQ (Board brd mv@(MoveNumber _ Black) _) = > Board (brd // > [ (5,8) := VacantSq, > (4,8) := mkColBoardSq Black Rook, > (3,8) := mkColBoardSq Black King, > (1,8) := VacantSq ]) (incMove mv) Nothing > [ (5,8) =: VacantSq, > (4,8) =: mkColBoardSq Black Rook, > (3,8) =: mkColBoardSq Black King, > (1,8) =: VacantSq ]) (incMove mv) Nothing > disAmb _ [_] = "" > disAmb (a,b) t@[(n,m),(x,y)] ... ...
 ... ... @@ -6,6 +6,9 @@ > import Interp > import PrintTEX