[Agda] hello, I've done something terrible...

Jeremy Shaw jeremy at n-heptane.com
Tue Jul 26 06:58:35 CEST 2011


Hello,

I am ashamed to admit that I have done something horrible ... I have  
written an irc bot in Agda.

That's right! A program that you can not only type-check -- but even  
run! And it is a pretty big hack job too... probably even buggy!

I have forever tarnished the good name of Agda.

You can attempt to browse the source here:

http://patch-tag.com/r/stepcut/agdabot/snapshot/current/content/pretty

But unicode support is apparently busted -- so it is a bit tough to  
read.

darcs get should be fine though:

darcs get http://patch-tag.com/r/stepcut/agdabot

Current it only supports one command: hi

Here is a sample session:

<stepcut> agdabot: hi
<agdabot> hello!

The most 'interesting' part of the code is perhaps the unit tests. For  
example, here is a unit test that checks that messages are decoded  
properly:

test-decode-1 : decode ":adams.freenode.net NOTICE * :*** Looking up  
your hostname..." ≡ just (record { prefix = just (server  
"adams.freenode.net") ; command = "NOTICE" ; params = "*" ∷ "***  
Looking up your hostname..." ∷ [] })
test-decode-1 = refl

There the unit test is in the type signature and checked at compile  
time. Obviously that is old hat to a seasoned Agda programmer, but  
crazy talk to a Haskell user :)

The thing that makes the code especially ugly is that I have not  
figured out how to handle the equivalent of nested case statements  
yet. So, I have a bunch of helper functions that use 'with f x' to  
work around that. That is probably the first thing I will fix.

The biggest known flaw is that the many1 parser does not prove  
termination, so I had to enable --no-termination-check. That is  
probably the second thing I will look at.

patches and flames welcome!

- jeremy

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.chalmers.se/pipermail/agda/attachments/20110725/7a40ae9a/attachment.html


More information about the Agda mailing list