USING: accessors generalizations io kernel math math.functions parser prettyprint prettyprint.custom sequences ; IN: rosetta-code.modular-arithmetic RENAME: ^ math.functions => ** ! Define a modular integer class. TUPLE: mod-int { n integer read-only } { mod integer read-only } ; ! Define a constructor for mod-int. C: mod-int ERROR: non-equal-modulus m1 m2 ; ! Define a literal syntax for mod-int. << SYNTAX: MI{ \ } [ first2 ] parse-literal ; >> ! Implement prettyprinting for mod-int custom syntax. M: mod-int pprint-delims drop \ MI{ \ } ; M: mod-int >pprint-sequence [ n>> ] [ mod>> ] bi { } 2sequence ; M: mod-int pprint* pprint-object ;