{"size": 4587, "ext": "scrbl", "max_stars_repo_path": "htdp-doc/htdp/error-reporting.scrbl", "max_stars_repo_name": "bdeket/htdp", "max_stars_repo_stars_event_min_datetime": "2015-01-14T20:28:41.000Z", "max_stars_repo_stars_event_max_datetime": "2022-03-20T04:04:26.000Z", "max_issues_repo_path": "htdp-doc/htdp/error-reporting.scrbl", "max_issues_repo_name": "bdeket/htdp", "max_issues_repo_issues_event_min_datetime": "2015-01-14T19:50:21.000Z", "max_issues_repo_issues_event_max_datetime": "2022-02-19T21:38:00.000Z", "max_forks_repo_path": "htdp-doc/htdp/error-reporting.scrbl", "max_forks_repo_name": "bdeket/htdp", "max_forks_repo_forks_event_min_datetime": "2015-01-14T19:11:38.000Z", "max_forks_repo_forks_event_max_datetime": "2022-03-24T05:11:39.000Z"}
{"max_stars_count": 85, "max_issues_count": 132, "max_forks_count": 81, "avg_line_length": 37.5983606557, "max_line_length": 95, "alphanum_fraction": 0.6692827556}
#lang scribble/doc

@(require scribble/manual (for-label htdp/error 2htdp/image racket))

@title[#:tag "error-reporting"]{Error Reporting Functions} 

@defmodule[htdp/error]

To provide uniform error messages from teachpacks, this module provides several functions: 

@defproc[(check-arg [name (or/c symbol? string?)]
		    [chk  boolean?]
                    [expected any/c]
		    [position (or/c (and/c positive? integer?) string?)]
		    [given any/c])
          void?]{
 Checks an flat-valued argument to function @scheme[name].
 Reports an error for function @scheme[name] 
  telling students what kind of data is @scheme[expected] at the @scheme[position]-th argument 
  and displaying what value was actually @scheme[given],
  unless @scheme[chk] is @scheme[#true].}

@defproc[(check-arity [name (or/c symbol? string?)]
		      [arg# (or/c (and/c positive? integer?) string?)?]
		      [args list?])
         void?]{
 Checks the arity of a procedure-valued argument to function @scheme[name].
 Reports an error for function @scheme[name] 
  telling students that @scheme[(length args)] arguments were provided but
  @scheme[arg#] were expected, unless @scheme[(= (length args) arg#)]
  produces @scheme[#true].} 

@defproc[(check-proc [name (or/c symbol? string?)]
		     [proc any/c]
		     [expected natural?]
		     [arg# (or/c (and/c positive? integer?) string?)]
		     [arg-err string?])
         void?]{
 Checks [the properties of] a procedure-valued argument to function @scheme[name].
 Reports an error for function @scheme[name] 
  telling students that a procedure was expected at position @scheme[arg#]
  and that this procedure should be of arity @scheme[expected],
  unless the @scheme[proc] is a function and has the @scheme[expected] arity.
  The string @scheme[arg-err] is used to describe the higher-order argument.}

@defproc[(check-result [name (or/c symbol? string?)]
		       [pred? (-> any/c boolean?)]
		       [kind (or/c symbol? string?)]
		       [returned any/c] ...+)
          void?]{
 Checks the expected result of a procedure-valued argument.
 If the result satisfies @scheme[pred?], it is returned. 
 Otherwise, the function reports an error for function @scheme[name] 
  telling students what @scheme[kind] of value is expected and what the
  @scheme[returned] value is. NOTE: if there is more than one
  @scheme[returned] value, the function uses the second value. (MF: I forgot
  why.)}


@defproc[(check-list-list [name (or/c symbol? string?)] 
			  [chk (or/c string? false/c)]
			  [pred? any/c]
			  [given any/c]) 
          void?]{
 Checks a list-of-lists-valued argument to function @scheme[name].
 Reports an error for function @scheme[name] if a list-of-lists contains 
 a value of the wrong kind---signaled via a string-valued @scheme[chk]. 
 The @scheme[given] value is the element that went wrong. Rarely used.}

@defproc[(check-color [name (or/c symbol? string?)] 
		      [arg# natural?]
		      [given any/c]) 
         void?]{
 Checks a color-valued argument to function @scheme[name]. 
 Deprecated. Use @scheme[image-color?] instead. 
 }

@defproc[(check-fun-res [f procedure?]
			[pred? (-> any/c boolean?)]
			[type (or/c symbol? string?)]) 
          void?]{
 Creates a callback from @scheme[f] and uses @scheme[check-result] to make
 sure the result is a piece of data that satisfies @scheme[pred?],
 described as @scheme[type].
 }

@defproc[(natural? [o any/c]) boolean?]{
 Determines whether the given value is a natural number.}

@defproc[(find-non [pred? (-> any/c boolean?)] [l list?]) (or/c any/c false/c)]{
 Find an element of @scheme[l] for which @scheme[(pred? l)] produces
 @scheme[#true]; otherwise return @scheme[#false].}
 
@defproc[(check-dependencies [name (or/c symbol? string?)]
			     [chk  boolean?]
			     [fmt format-string?]
			     [arg any/c] ...) 
          void?]{
 Unless @scheme[chk] is @scheme[#true], it raises an error called
 @scheme[name] whose message is composed from @scheme[fmt] and the
 @scheme[arg]s. 
 }

@defproc[(tp-error [name (or/c symbol? string?)]
		   [fmt format-string?]
		   [arg any/c] ...)
         void?]{
 Signals an @racket[exn:fail:contract] from @scheme[fmt] and @scheme[arg]
 for a function called @scheme[name].}

@defproc[(tp-exn? [o any/c]) boolean?]{
 Determine whether the given object is a teachpack exception 
 MF: Guillaume seems to have deprecated these structures. 
 }

@defproc[(number->ord [n natural?]) string?]{
 Convert a position number into a string, e.g., 1 into ``first'' and so
 on.}

MF: These library and its uses needs to be cleaned up. 

