## Copyright (c) Eduardo Julian. All rights reserved. ## This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. ## If a copy of the MPL was not distributed with this file, ## You can obtain one at http://mozilla.org/MPL/2.0/. (;import lux (lux/control ord)) ## [Signatures] (defsig #export (Enum e) (: (Ord e) _ord) (: (-> e e) succ) (: (-> e e) pred)) ## [Functions] (def (range' <= succ from to) (All [a] (-> (-> a a Bool) (-> a a) a a (List a))) (if (<= from to) (#;Cons from (range' <= succ (succ from) to)) #;Nil)) (def #export (range enum from to) (All [a] (-> (Enum a) a a (List a))) (using enum (range' <= succ from to)))