For the first assignment, we will look at how Haskell handles big numbers. ***NOTE: YOU MAY NOT CHANGE ANY TYPE SIGNATURES*** ***IF YOU DO, YOU WILL GET A ZERO FOR THE ASSIGNMENT*** Consider the following Java program (available in Test.java). public class Test { public void main(String[] args) { System.out.println(999999999999999999999 * 2); } } You could easily calculate 999999999999999999999 * 2 with pencil and paper; Java cannot handle it. $ javac Test.java Test.java:3: error: integer number too large: 999999999999999999999 System.out.println(999999999999999999999 * 2); ^ 1 error With Haskell, there is no problem: $ ghci GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done. Prelude> 999999999999999999999 * 2 1999999999999999999998 Prelude> So how does Haskell handle these numbers? We will implement a simplified BigNum module to understand it better. In our implementation, a number will be a list of "blocks" of numbers from 0-999, stored with the least significant "block" first. So 9,073,201 will be stored as: [201,73,9] Your job is to complete BigNum.hs. The breakdown of points is as follows: * 10 points -- Complete bigAdd' * 5 points -- Complete bigSubtract' * 3 points -- Complete bigMultiply * 2 points -- Complete bigPowerOf Starter code is available on the course website. The files include: * BigNum.hs -- You will modify this file (only). * Calculator.hs -- A (very) simple calculator that relies on your BigNum module. * test.hs -- A number of test cases that use BigNum. * input -- A number of cases that Calculator.hs should handle correctly. * output_EXPECTED -- the expected results of calling (from the command line): $runhaskell test.hs $runhaskell Calculator.hs < input Note that negative numbers are not supported, and should raise an error. Submit BigNum.hs through Canvas.