RFC: Add HasCallStack constraint to partial Data.List functions.

Simon Peyton Jones simonpj at microsoft.com
Wed Jun 9 14:15:20 UTC 2021


|  If we indeed had something like
|  
|      head :: Partial => [a] -> a
|  
|  that would be both informative and fairly straightforward to explain to
|  students, for example. (Even if it is not clear to me that a type class
|  really is the right way to express partiality of functions: I always thought
|  information about partiality ought to be tied to the function arrow.)

OK -- that sounds promising.  It's what Richard suggested earlier, and sounds pretty good to me.

Simon


|  -----Original Message-----
|  From: Henrik.Nilsson at nottingham.ac.uk <Henrik.Nilsson at nottingham.ac.uk>
|  Sent: 09 June 2021 14:45
|  To: Simon Peyton Jones <simonpj at microsoft.com>; Henrik Nilsson
|  <Henrik.Nilsson at nottingham.ac.uk>; libraries at haskell.org
|  Subject: Re: RFC: Add HasCallStack constraint to partial Data.List
|  functions.
|  
|   > I'm not sure I really agree with that.  There is a rich literature on  >
|  effect systems, which decorate types with information about what  > effects
|  the function has: exceptions, divergence, IO, and the like.
|    > So type like
|   >   head :: Partial => [a] -> a
|   > where 'Partial =>' expresses the fact that calling this function  > might
|  lead to a call of 'error' doesn't seem inherently something  > that doesn't
|  belong in a type system.
|  
|  I, of course, agree that partiality is an effect. And I have no issues with
|  effects being reflected in the type system.
|  We do that all the time with e.g. monads.
|  
|  If we indeed had something like
|  
|      head :: Partial => [a] -> a
|  
|  that would be both informative and fairly straightforward to explain to
|  students, for example. (Even if it is not clear to me that a type class
|  really is the right way to express partiality of functions: I always thought
|  information about partiality ought to be tied to the function arrow.)
|  
|  My point is that "HasCallStack" strongly suggest a specific approach to
|  monitor the behaviour of a function in case it goes wrong.
|  
|  To me, at least, that is very operational.
|  
|  And I would struggle to explain
|  
|      head :: HasCallStack => [a] -> a
|  
|  beyond saying "it's just something that sometimes will help you with
|  debugging", and deeply hoping no clever student would ask about the lack of
|  similar annotations for other partial functions.
|  
|  Best,
|  
|  /Henrik
|  
|  
|  
|  This message and any attachment are intended solely for the addressee and
|  may contain confidential information. If you have received this message in
|  error, please contact the sender and delete the email and attachment.
|  
|  Any views or opinions expressed by the author of this email do not
|  necessarily reflect the views of the University of Nottingham. Email
|  communications with the University of Nottingham may be monitored where
|  permitted by law.
|  
|  
|  



More information about the Libraries mailing list