lennart:
Howdy, y'all!
I've written a small program that takes a (Haskell) type and gives you back a function of that type if one exists. It's kind of fun, so I thought I'd share it.
It's probably best explained with a sample session.
calvin% djinn Welcome to Djinn version 2005-12-11. Type :h to get help. # Djinn is interactive if not given any arguments. # Let's see if it can find the identity function. Djinn> f ? a->a f :: a -> a f x1 = x1 # Yes, that was easy. Let's try some tuple munging. Djinn> sel ? ((a,b),(c,d)) -> (b,c) sel :: ((a, b), (c, d)) -> (b, c) sel ((_, v5), (v6, _)) = (v5, v6)
I've written a little plugin to use Djinn from lambdabot. You can interact with it on the #haskell irc channel *right now* Transcript: 15:39:01 <dons> @djinn a -> b -> a 15:39:02 <lambdabot> x :: a -> b -> a 15:39:02 <lambdabot> x x1 _ = x1 15:39:11 <dons> @djinn (a -> b -> c) -> ((a,b) -> c) 15:39:11 <lambdabot> x :: (a -> b -> c) -> (a, b) -> c 15:39:11 <lambdabot> x x1 (v3, v4) = x1 v3 v4 15:39:27 <dons> @djinn (a -> b) -> (c -> b) -> Either a c -> b 15:39:27 <lambdabot> x :: (a -> b) -> (c -> b) -> Either a c -> b 15:39:27 <lambdabot> x x1 x2 x3 = case x3 of 15:39:27 <lambdabot> Left l4 -> x1 l4 15:39:27 <lambdabot> Right r5 -> x2 r5 15:40:06 <xerox> @djinn a -> [a] -> [a] 15:40:07 <lambdabot> x :: a -> [a] -> [a] 15:40:07 <lambdabot> x _ x2 = x2 15:40:08 <dons> @help djinn 15:40:09 <lambdabot> @djinn <type> 15:40:09 <lambdabot> Generates Haskell code from a type. And then we go crazy with @djinn for about 10 minutes :) Great stuff Lennart. Cheers, Don