From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!news.eternal-september.org!news.eternal-september.org!feeder.eternal-september.org!newsfeed.datemas.de!weretis.net!feeder4.news.weretis.net!news.on-luebeck.de!reality.xs3.de!news.jacob-sparre.dk!loke.jacob-sparre.dk!pnx.dk!.POSTED!not-for-mail From: Jacob Sparre Andersen Newsgroups: comp.lang.ada Subject: Re: Making sense of predicates Date: Tue, 22 Oct 2013 09:35:02 +0200 Organization: Jacob Sparre Andersen Research & Innovation Message-ID: <87eh7drc61.fsf@adaheads.sparre-andersen.dk> References: <1830ad81-00dc-4639-922a-771a01cd06ec@googlegroups.com> NNTP-Posting-Host: monowall.adaheads.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: loke.gir.dk 1382427303 11339 86.48.41.195 (22 Oct 2013 07:35:03 GMT) X-Complaints-To: news@jacob-sparre.dk NNTP-Posting-Date: Tue, 22 Oct 2013 07:35:03 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.4 (gnu/linux) Cancel-Lock: sha1:Hp74v+mJZbcu4Pri28Yu4vmno98= Xref: news.eternal-september.org comp.lang.ada:17495 Date: 2013-10-22T09:35:02+02:00 List-Id: Shark8 writes: > Agreed; I was disappointed the following doesn't work: > > Subtype Digit_Character is Character range '0'..'9'; > > Subtype Part_Number is String > with Static_Predicate => (for all C in Part_Number => C in Digit_Character); > > As it would be nice to basically subtype out [further-constrain] the > element-type just as we can do to the index (e.g. "Subtype > Phone_Digits is String(1..7);", which is equivalent to "subtype > phone_range is Positive range 1..7; Subtype Phone_Digits is > String(Phone_Range);", where 'phone_range' is an anonymous subtype.) If you did it right, it would work: package Parts is subtype Digit_Character is Character range '0' .. '9'; subtype Part_Number is String with Dynamic_Predicate => (for all C of Part_Number => C in Digit_Character); end Parts; with Parts; procedure Use_Parts is Work : Parts.Part_Number := "1234"; Fail : Parts.Part_Number := "fail"; begin null; end Use_Parts; % ./use_parts raised SYSTEM.ASSERTIONS.ASSERT_FAILURE : Dynamic_Predicate failed at use_parts.adb:6 % Greetings, Jacob -- Photos from the Faroe Islands: http://billeder.sparre-andersen.dk/The_Faroe_Islands/