equal
deleted
inserted
replaced
344 \hspace*{0pt}datatype nat = Zero{\char95}nat | Suc of nat;\\ |
344 \hspace*{0pt}datatype nat = Zero{\char95}nat | Suc of nat;\\ |
345 \hspace*{0pt}\\ |
345 \hspace*{0pt}\\ |
346 \hspace*{0pt}type 'a semigroup = {\char123}mult :~'a -> 'a -> 'a{\char125};\\ |
346 \hspace*{0pt}type 'a semigroup = {\char123}mult :~'a -> 'a -> 'a{\char125};\\ |
347 \hspace*{0pt}fun mult (A{\char95}:'a semigroup) = {\char35}mult A{\char95};\\ |
347 \hspace*{0pt}fun mult (A{\char95}:'a semigroup) = {\char35}mult A{\char95};\\ |
348 \hspace*{0pt}\\ |
348 \hspace*{0pt}\\ |
349 \hspace*{0pt}type 'a monoid = {\char123}Program{\char95}{\char95}semigroup{\char95}monoid :~'a semigroup,~neutral :~'a{\char125};\\ |
349 \hspace*{0pt}type 'a monoid = {\char123}semigroup{\char95}monoid :~'a semigroup,~neutral :~'a{\char125};\\ |
350 \hspace*{0pt}fun semigroup{\char95}monoid (A{\char95}:'a monoid) = {\char35}Program{\char95}{\char95}semigroup{\char95}monoid A{\char95};\\ |
350 \hspace*{0pt}fun semigroup{\char95}monoid (A{\char95}:'a monoid) = {\char35}semigroup{\char95}monoid A{\char95};\\ |
351 \hspace*{0pt}fun neutral (A{\char95}:'a monoid) = {\char35}neutral A{\char95};\\ |
351 \hspace*{0pt}fun neutral (A{\char95}:'a monoid) = {\char35}neutral A{\char95};\\ |
352 \hspace*{0pt}\\ |
352 \hspace*{0pt}\\ |
353 \hspace*{0pt}fun pow A{\char95}~Zero{\char95}nat a = neutral A{\char95}\\ |
353 \hspace*{0pt}fun pow A{\char95}~Zero{\char95}nat a = neutral A{\char95}\\ |
354 \hspace*{0pt} ~| pow A{\char95}~(Suc n) a = mult (semigroup{\char95}monoid A{\char95}) a (pow A{\char95}~n a);\\ |
354 \hspace*{0pt} ~| pow A{\char95}~(Suc n) a = mult (semigroup{\char95}monoid A{\char95}) a (pow A{\char95}~n a);\\ |
355 \hspace*{0pt}\\ |
355 \hspace*{0pt}\\ |
361 \hspace*{0pt}fun mult{\char95}nat Zero{\char95}nat n = Zero{\char95}nat\\ |
361 \hspace*{0pt}fun mult{\char95}nat Zero{\char95}nat n = Zero{\char95}nat\\ |
362 \hspace*{0pt} ~| mult{\char95}nat (Suc m) n = plus{\char95}nat n (mult{\char95}nat m n);\\ |
362 \hspace*{0pt} ~| mult{\char95}nat (Suc m) n = plus{\char95}nat n (mult{\char95}nat m n);\\ |
363 \hspace*{0pt}\\ |
363 \hspace*{0pt}\\ |
364 \hspace*{0pt}val semigroup{\char95}nat = {\char123}mult = mult{\char95}nat{\char125}~:~nat semigroup;\\ |
364 \hspace*{0pt}val semigroup{\char95}nat = {\char123}mult = mult{\char95}nat{\char125}~:~nat semigroup;\\ |
365 \hspace*{0pt}\\ |
365 \hspace*{0pt}\\ |
366 \hspace*{0pt}val monoid{\char95}nat =\\ |
366 \hspace*{0pt}val monoid{\char95}nat = {\char123}semigroup{\char95}monoid = semigroup{\char95}nat,~neutral = neutral{\char95}nat{\char125}\\ |
367 \hspace*{0pt} ~{\char123}Program{\char95}{\char95}semigroup{\char95}monoid = semigroup{\char95}nat,~neutral = neutral{\char95}nat{\char125}~:\\ |
367 \hspace*{0pt} ~:~nat monoid;\\ |
368 \hspace*{0pt} ~nat monoid;\\ |
|
369 \hspace*{0pt}\\ |
368 \hspace*{0pt}\\ |
370 \hspace*{0pt}fun bexp n = pow monoid{\char95}nat n (Suc (Suc Zero{\char95}nat));\\ |
369 \hspace*{0pt}fun bexp n = pow monoid{\char95}nat n (Suc (Suc Zero{\char95}nat));\\ |
371 \hspace*{0pt}\\ |
370 \hspace*{0pt}\\ |
372 \hspace*{0pt}end;~(*struct Example*)% |
371 \hspace*{0pt}end;~(*struct Example*)% |
373 \end{isamarkuptext}% |
372 \end{isamarkuptext}% |
965 \begin{isamarkuptext}% |
964 \begin{isamarkuptext}% |
966 \isatypewriter% |
965 \isatypewriter% |
967 \noindent% |
966 \noindent% |
968 \hspace*{0pt}strict{\char95}dequeue ::~forall a.~Queue a -> (a,~Queue a);\\ |
967 \hspace*{0pt}strict{\char95}dequeue ::~forall a.~Queue a -> (a,~Queue a);\\ |
969 \hspace*{0pt}strict{\char95}dequeue (AQueue xs []) =\\ |
968 \hspace*{0pt}strict{\char95}dequeue (AQueue xs []) =\\ |
970 \hspace*{0pt} ~let {\char123}\\ |
969 \hspace*{0pt} ~(let {\char123}\\ |
971 \hspace*{0pt} ~~~(y :~ys) = rev xs;\\ |
970 \hspace*{0pt} ~~~(y :~ys) = rev xs;\\ |
972 \hspace*{0pt} ~{\char125}~in (y,~AQueue [] ys);\\ |
971 \hspace*{0pt} ~{\char125}~in (y,~AQueue [] ys) );\\ |
973 \hspace*{0pt}strict{\char95}dequeue (AQueue xs (y :~ys)) = (y,~AQueue xs ys);% |
972 \hspace*{0pt}strict{\char95}dequeue (AQueue xs (y :~ys)) = (y,~AQueue xs ys);% |
974 \end{isamarkuptext}% |
973 \end{isamarkuptext}% |
975 \isamarkuptrue% |
974 \isamarkuptrue% |
976 % |
975 % |
977 \endisatagquote |
976 \endisatagquote |