(cl:defpackage #:ray/color (:use #:coalton #:coalton-prelude) (:export #:Color #:black #:white #:mul #:mul-scalar #:add)) (cl:in-package #:ray/color) (cl:declaim (cl:optimize (cl:speed 3) (cl:safety 0) (cl:debug 0))) (coalton-toplevel (define-type Color (Color F64 F64 F64)) (declare black Color) (define black (Color 0.0d0 0.0d0 0.0d0)) (declare white Color) (define white (Color 1.0d0 1.0d0 1.0d0)) (declare mul (Color * Color -> Color)) (define (mul (Color r g b) (Color r2 g2 b2)) "Multiply a color by a given scalar value" (Color (* r r2) (* g g2) (* b b2))) (declare mul-scalar (Color * F64 -> Color)) (define (mul-scalar (Color r g b) v) "Multiply a color by a given scalar value" (Color (* r v) (* g v) (* b v))) (declare add (Color * Color -> Color)) (define (add (Color r1 g1 b1) (Color r2 g2 b2)) (Color (+ r1 r2) (+ g1 g2) (+ b1 b2))))