[Haskell-cafe] Agda's BUILTIN Naturals in Haskell

Li-yao Xia lysxia at gmail.com
Sun Apr 28 12:00:56 UTC 2019


Hi Georgi,

That sounds like a use case for pattern synonyms. As its name suggests, 
it allows you to give constructor names to patterns. This is quite 
powerful when combined with view patterns, which allow patterns to use 
arbitrary logic.

User Guide on pattern synonyms: 
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#pattern-synonyms

pattern Z :: Integer
pattern Z = 0

pattern S :: Integer -> Integer
pattern S n <- (succ' -> Just n) where
   S n = n + 1

succ' :: Integer -> Maybe Integer
succ' n | n > 0 = Just (n - 1)
         | otherwise = Nothing

Cheers,
Li-yao

On 4/28/19 5:38 AM, Georgi Lyubenov wrote:
> Hey,
> 
> Is there any way to do something similar to what Agda does with natural
> numbers via BUILTIN pragmas?
> More precisely I want to have correct-by-construction natural numbers, that
> at runtime are treated as `Integer`s. My initial idea was to abuse rewrite
> rules to turn `data N = Z | S N` into `Integer` terms somehow, but I'm not
> sure if this is possible.
> 
> =======
> Georgi
> 
> 
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
> 


More information about the Haskell-Cafe mailing list