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!feeder.eternal-september.org!aioe.org!.POSTED.3d73Ybk3C5U4I2t8lv+lAQ.user.gioia.aioe.org!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: How to best make a custom range? Date: Tue, 5 Nov 2019 18:14:53 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <21fa6db8-4b86-459f-bc5a-70993f92c28a@googlegroups.com> <27cb5366-4b3d-4f33-b8ec-2bc71c70780c@googlegroups.com> <530a0f85-158a-4c42-b826-04ae4bd46451@googlegroups.com> NNTP-Posting-Host: 3d73Ybk3C5U4I2t8lv+lAQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 X-Notice: Filtered by postfilter v. 0.9.2 Content-Language: en-US Xref: reader01.eternal-september.org comp.lang.ada:57490 Date: 2019-11-05T18:14:53+01:00 List-Id: On 2019-11-05 15:02, Andrew Shvets wrote: > This is what I have now. > > subtype DNA_Chars is Character range ‘A’ .. ‘Z’; > subtype DNA_Symbols is Character with Static_Predicate => DNA_Symbols in ‘ ‘; > subtype DNA_Char is Character with Static_Predicate => DNA_Char in DNA_Chars | DNA_Symbols; > > And this is the warning that I get (one of many, but I can’t copy and paste): > > warning: in instantiation at a-nudira.adb:54 > type “Result_Subtype” has predicates, attribute “First” not allowed Because ordering attributes are ones that get broken either way. Outside generics the language threats them contravariant [the result is of the base subtype], which breaks ordering but keeps much of other semantics. When you pass a subtype as an actual parameter to a generic it suddenly becomes covariant [the result of the subtype], which is sometimes worse, sometimes quite impossible to implement. Ada plays safe here and just does not let you. In other cases you might not be so lucky. The language cannot deduce right semantics from the constraint. It is undecidable, incomputable etc. In short, do not do that. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de