00:05:11 -!- elliott has quit (Remote host closed the connection).
00:06:52 -!- kwertii has quit (Quit: kwertii).
00:13:55 -!- copumpkin has joined.
00:20:37 -!- Jafet has quit (Quit: Leaving.).
00:23:45 -!- elliott_ has joined.
00:24:57 -!- Sgeo|web has joined.
00:25:32 <Sgeo|web> Can't deal with infinite lists sensibly, bluh
00:25:51 <Sgeo|web> I mentioned it in #haskell, apparently there's no way to write the instance properly?
00:26:04 <oerjan> a tree monad might be better for such a thing
00:27:03 <oerjan> also, there's that MonadLogic >>- thing which breaks the ordering but otherwise does something like what you'd want, iiuc
00:27:51 <oerjan> > [1..] >>- map (,) x [1..]
00:27:52 <lambdabot> Couldn't match expected type `[a]'
00:27:52 <lambdabot> against inferred type `SimpleRef...
00:28:02 <oerjan> > [1..] >>- \x -> map (,) x [1..]
00:28:02 <lambdabot> Couldn't match expected type `[t] -> [b]'
00:28:10 <lambdabot> forall (m :: * -> *) a b. (MonadLogic m) => m a -> (a -> m b) -> m b
00:28:28 <oerjan> > [1..] >>- \x -> map ((,) x) [1..]
00:28:29 <lambdabot> [(1,1),(2,1),(1,2),(3,1),(1,3),(2,2),(1,4),(4,1),(1,5),(2,3),(1,6),(3,2),(1...
00:30:38 <oerjan> it's not very balanced in how often elements are taken from the first list though: 1 is picked 1/2 of the time, 2 1/4 of the time, 3 1/8, etc.
00:31:44 -!- pikhq_ has quit (Remote host closed the connection).
00:33:30 <oerjan> that's the wrong kind of tree to be a monad, iirc
00:34:59 <oerjan> Forest a = [Tree a], iirc
00:35:08 <oerjan> Node is the constructor
00:35:49 <oerjan> so each node has an a label, and a list of children
00:37:44 <oerjan> > (Node 1 []) >>= \x -> (Node x []) -- let's check if it is a Monad anyway
00:37:44 <lambdabot> Node {rootLabel = 1, subForest = []}
00:38:55 <oerjan> > return 1 >>= \x -> (Node x [])
00:38:56 <lambdabot> Node {rootLabel = 1, subForest = []}
00:39:12 <oerjan> > return 1 :: Tree Int
00:39:13 <lambdabot> Node {rootLabel = 1, subForest = []}
00:40:44 <oerjan> > Node 1 [Node 2 [], Node 3 []] >>= \x -> Node x [Node (x+10), Node (x+10)]
00:40:45 <lambdabot> Couldn't match expected type `Data.Tree.Tree t'
00:41:07 <oerjan> > Node 1 [Node 2 [], Node 3 []] >>= \x -> Node x [Node (x+10) [], Node (x+10) []]
00:41:08 <lambdabot> Node {rootLabel = 1, subForest = [Node {rootLabel = 11, subForest = []},Nod...
00:45:22 <oerjan> :t Text.Show.showListWith
00:45:23 <lambdabot> forall a. (a -> ShowS) -> [a] -> String -> String
00:45:42 -!- ive has quit (Read error: Operation timed out).
00:47:54 <oerjan> @let showsT s (Node x l) = ("Node (" ++) . s x . (") "++) . Text.Show.showListWith (showsT s) l; sT t = showsT show t
00:47:54 <lambdabot> <local>:5:55: Not in scope: `Text.Show.showListWith'
00:51:25 <oerjan> > levels $ Node 1 [Node 2 [], Node 3 []] >>= \x -> Node x [Node (x+10) [], Node (x+10) []]
00:51:54 <oerjan> hm that doesn't really give all information
00:55:49 <oerjan> the module in question contains several methods for building trees, and some instances, but nothing that can be used to easily give it in a compact format :(
00:55:55 <oerjan> http://www.haskell.org/ghc/docs/latest/html/libraries/containers-0.4.1.0/Data-Tree.html
00:56:11 <oerjan> the default Show instance includes all field names
00:56:36 <oerjan> basically, there is nothing there to take _apart_ trees recursively.
00:58:30 <oerjan> > drawTree $ Node 1 [Node 2 [], Node 3 []] >>= \x -> show <$> Node x [Node (x+10) [], Node (x+10) []]
00:58:31 <lambdabot> "1\n|\n+- 11\n|\n+- 11\n|\n+- 2\n| |\n| +- 12\n| |\n| `- 12\n|\n`- 3\n ...
00:59:46 <oerjan> @msg lambdabot @run text . drawTree $ Node 1 [Node 2 [], Node 3 []] >>= \x -> show <$> Node x [Node (x+10) [], Node (x+10) []]
01:00:52 <oerjan> well that worked, sort of, although i had to give @more twice
01:03:06 <oerjan> ok it appears that >>= simply concatenates the list part from the 1 with the list of results from 2 and 3
01:04:23 <oerjan> Node x ts >>= f = Node x' (ts' ++ map (>>= f) ts) where Node x' ts' = f x
01:05:19 <elliott_> 01:24 <Sgeo|web> I hate the List monad
01:05:20 <oerjan> does that fulfil the monad laws i wonder
01:05:27 <elliott_> I like the part where you criticise things before fully understanding them
01:05:35 -!- Vorpal has quit (Ping timeout: 248 seconds).
01:05:45 <elliott_> 01:34 <oerjan> Forest a = [Tree a], iirc
01:05:49 <oerjan> elliott_: well he did have a valid point
01:05:52 <elliott_> oerjan: no, it's -- oh, Forest
01:06:06 <elliott_> 01:55 <oerjan> the module in question contains several methods for building trees, and some instances, but nothing that can be used to easily give it in a compact format :(
01:06:11 <elliott_> um that is what the draw functions are for
01:06:21 <oerjan> elliott_: those are not compact.
01:06:30 <elliott_> how could they be more compact
01:06:35 <oerjan> especially not compact enough to demonstrate with lambdabot
01:07:16 <oerjan> something like the Show, except leaving out all the field fluff
01:07:54 <oerjan> i tried to define it above but i gave up when showListWith was unavailable
01:08:39 <oerjan> there _might_ be some obscure module prefix, of course
01:08:55 <oerjan> (Text.Show already tested)
01:10:40 <oerjan> ok >>= does fulfil 1st and 2nd monad laws, i think
01:10:56 -!- kwertii has joined.
01:11:36 <elliott_> oerjan: well it's Text.Show.showListWith
01:11:42 <lambdabot> Not in scope: `Text.Show.showListWith'
01:11:56 <oerjan> <oerjan> (Text.Show already tested)
01:12:29 <oerjan> lambdabot's little inconsistencies...
01:13:29 <oerjan> there should be some form which we didn't have to guess, which would have to be the fully qualified one with the actual module name.
01:18:59 <Sgeo|web> Is there a way to see which modules are loaded?
01:21:54 <lambdabot> http://code.haskell.org/lambdabot/COMMANDS
01:22:41 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
01:22:57 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
01:23:11 <lambdabot> version/source. Report the version and darcs repo of this bot
01:23:49 <oerjan> Sgeo|web: they tell me @vixen was removed
01:24:00 <lambdabot> quote provides: quote remember forget ghc fortune yow arr yarr keal b52s brain palomer girl19 v yhjulwwiefzojcbxybbruweejw protontorpedo nixon farber
01:24:23 <oerjan> and nixon added in its place
01:24:25 <lambdabot> You know, it's a funny thing, every one of the bastards that are out for legalizing marijuana is Jewish. What the Christ is the matter with the Jews, Bob? What is the matter with them? I suppose it
01:24:26 <lambdabot> is because most of them are psychiatrists.
01:25:46 <oerjan> i have this vague hunch @nixon is meant to insult precisely the kind of people who complained to get @vixen removed :P
01:26:13 <oerjan> also, lambdabot's spelling correction means @vixen -> @nixon automatically now
01:26:50 <oerjan> it was a chatbot which behaved like a somewhat promiscuous girl
01:27:19 <oerjan> and apparently you could get it to do some explicit sex talk if you knew how
01:28:00 <oerjan> so obviously offensive to conservatives
01:28:14 <lambdabot> Once you get into this great stream of history, you can't get out.
01:30:36 <oerjan> @nixon so what about african-americans?
01:30:36 <lambdabot> You won't have Nixon to kick around anymore, because, gentlemen, this is my last press conference.
01:30:55 <oerjan> i guess it's not context-sensitive like @vixen was
01:31:26 <lambdabot> ghc says: Illegal unlifted type argument
01:35:25 <lambdabot> ghc says: There must be at least one non-type-variable in the instance head
01:35:26 <lambdabot> You have to face the fact that whole problem is really the blacks. The key is to divise a system that reconizes this while not appearing to...
01:35:36 -!- ive has joined.
01:39:55 <lambdabot> People react to fear, not love; they don't teach that in Sunday School, but it's true.
01:40:12 <lambdabot> ghc says: Type signature given for an expression
01:41:08 -!- pikhq has joined.
01:41:32 <oerjan> > let a b * c :: Int in "test"
01:41:33 <lambdabot> <no location info>: Invalid type signature
01:41:53 <oerjan> i wonder what would give that error message
01:42:06 <oerjan> it might not any longer, though
01:42:23 <elliott_> http://www.haskell.org/pipermail/haskell/2002-November/010660.html
01:43:07 <oerjan> you and your superhuman googling skills
01:43:34 <oerjan> > let foo bar :: t in "test again"
01:43:35 <lambdabot> <no location info>: Invalid type signature
01:44:07 <lambdabot> Left-hand side of type signature is not a variable: foo bar
01:44:09 <elliott_> oerjan: that's from two thousand and two, dude
01:44:45 <oerjan> well i think i found the modern equivalent there, anyway
01:55:04 <lambdabot> Source not found. My brain just exploded
01:55:41 <Sgeo|web> @help yhjulwwiefzojcbxybbruweejw
01:55:59 <oerjan> Sgeo|web: @src has got much worse lately, i think
01:56:23 <oerjan> well _ideally_ it should give the definition of Bool there...
01:56:27 <Sgeo|web> Well, showing the data or newtype line would be a sensible thing to do
01:56:57 <lambdabot> data Bool = False | True deriving (Eq, Ord)
01:57:03 -!- CakeProphet has joined.
01:57:27 <lambdabot> Source not found. Just what do you think you're doing Dave?
01:57:44 <oerjan> that's a method default, and >>= has none
01:57:49 <Sgeo|web> Hmm, so, for class functions (is that the right term?), it will show the default it aavlable
01:58:04 <oerjan> and if someone remembered to put it in
01:58:26 <oerjan> i think that's the term?
01:59:01 <Sgeo|web> I should rewrite the Prototype MultiDispatch example in Haskell
01:59:33 <Sgeo|web> "Prototypes with Multiple Dispatch"
01:59:53 <oerjan> method is used in the haskell report, yes
02:00:17 <Sgeo|web> Because I feel like that's just showing off Haskell's awesomeness
02:02:27 <oerjan> how come i haven't seen this before http://blog.plover.com/prog/burritos.html
02:03:58 <Sgeo|web> Monads are thingies that you can combine with a function that takes some plain old thing and gives a thing and, in combining the thingy and the function to a thingy, you get another thingy
02:05:18 <Sgeo|web> And when I said gives a thing, I meant gives a thingy
02:05:38 <Patashu> ENERGY FETUS http://imgur.com/a/dBz45
02:05:51 <oerjan> `run echo "Monads are thingies that you can combine with a function that takes some plain old thing and gives a thing and, in combining the thingy and the function to a thingy, you get another thingy" | sed 's/thing(ie|y)?/smurf/g'
02:05:53 <HackEgo> Monads are thingies that you can combine with a function that takes some plain old thing and gives a thing and, in combining the thingy and the function to a thingy, you get another thingy
02:06:41 -!- tiffany has quit (Quit: Leaving).
02:06:57 <oerjan> `run echo "Monads are thingies that you can combine with a function that takes some plain old thing and gives a thing and, in combining the thingy and the function to a thingy, you get another thingy" | sed '%s/thing(ie|y)?/smurf/g'
02:06:58 <HackEgo> sed: -e expression #1, char 1: unknown command: `%'
02:07:13 <oerjan> wtf is wrong with my sed :(
02:07:20 <Sgeo|web> I don't say thingie oh wait yes I did
02:09:59 <oerjan> `run echo "Monads are thingies that you can combine with a function that takes some plain old thing and gives a thing and, in combining the thingy and the function to a thingy, you get another thingy" | sed 's/thing\(ie\|y\)\?/smurf/g'
02:10:01 <HackEgo> Monads are smurfs that you can combine with a function that takes some plain old smurf and gives a smurf and, in combining the smurf and the function to a smurf, you get another smurf
02:11:52 <oerjan> Patashu: something tells me DC doesn't do drug testing of employees
02:16:55 <elliott_> oerjan: um wat are you doing :P
02:17:04 <elliott_> 03:02 <oerjan> how come i haven't seen this before http://blog.plover.com/prog/burritos.html
02:17:12 <elliott_> oerjan: because i only relinked it from the past in hash-haskell a few days ago
02:17:21 <elliott_> it's my favourite monad tutorial
02:17:33 <elliott_> 03:00 <Sgeo|web> Because I feel like that's just showing off Haskell's awesomeness
02:17:36 <elliott_> you don't even _know_ what that is yet
02:17:48 <oerjan> elliott_: i think every time i've seen the link i've assumed it was something i'd already seen
02:18:14 <elliott_> oerjan: I was shocked to learn that the wikibooks actually uses a spacesuit/nuclear waste analogy
02:19:23 <elliott_> oerjan: where did you see it this time?
02:19:44 <oerjan> data BlackHole = BlackHole; instance Monad BlackHole where return _ = BlackHole; _ >>= _ = BlackHole
02:19:50 <oerjan> elliott_: in a reddit comment thread
02:19:51 -!- ive has quit (Ping timeout: 255 seconds).
02:20:21 <oerjan> (inspired by the spacesuit)
02:20:41 <elliott_> oerjan: violates the laws, I think
02:20:48 <elliott_> undefined >>= return === BlackHole
02:21:01 <elliott_> that's an oft-violated one, though :)
02:21:04 <oerjan> grmbl i was wondering about undefined
02:21:16 <elliott_> maybe even more normal monads in the transformers library, too
02:21:21 <elliott_> oerjan: btw, MaybeT _IS STANDARD_
02:21:37 <oerjan> data BlackHole; instance Monad BlackHole where return _ = undefined; _ >>= _ = undefined
02:22:14 <elliott_> oerjan: I think that fulfils all of the laws :P
02:22:46 <oerjan> a bit hard for that _not_ to fulfil an equality
02:23:10 -!- pikhq_ has joined.
02:23:21 <elliott_> oerjan: data BlackHole a b; IS IT AN ARROW???
02:23:44 -!- pikhq has quit (Ping timeout: 276 seconds).
02:24:19 <oerjan> the arrow of very short time left
02:24:38 <elliott_> well the definitions of the methods are obvious
02:24:42 <elliott_> I note that Control.Arrow fails to list the laws
02:26:50 <oerjan> data BlackHole = BlackHole; instance Monad BlackHole where return _ = BlackHole; x >>= _ = x -- would that work?
02:27:26 <Gregor> WHY'D YOU CALL IT A /BLACK/ HOLE? RACIST.
02:28:03 <oerjan> return x >>= f has some trouble there
02:29:28 <oerjan> Gregor: well it was not american, so i couldn't call it african-american could i?
02:30:42 <Gregor> The RACIST part is that you're implying that people (and/or holes) of African descent steal things.
02:30:54 <oerjan> > (undefined >>= putStr) `seq` "test"
02:31:18 <lambdabot> A public man must never forget that he loses his usefulness when he as an individual, rather than his policy, becomes the issue.
02:31:24 <elliott_> 03:26 <oerjan> data BlackHole = BlackHole; instance Monad BlackHole where return _ = BlackHole; x >>= _ = x -- would that work?
02:31:38 <elliott_> oerjan: except (BlackHole >>= fmap (const undefined))
02:31:47 <elliott_> since Nothing >>= fmap (const undefined) == Nothing
02:32:30 -!- elliott_ has set topic: Esolangers, get a life and shut up. Stop cluttering the IRC with your inane prattle. Go aestivate under a rock somewhere. ... In short, feep off and die. | 12345678^&!* | http://codu.org/logs/_esoteric/.
02:32:32 <oerjan> elliott_: i think it breaks return x >>= f = f x
02:33:01 <lambdabot> Couldn't match expected type `[a]'
02:33:02 <lambdabot> against inferred type `Data.Mayb...
02:36:00 <oerjan> elliott_: who said that in the topic?
02:38:08 <lambdabot> Not in scope: data constructor `Some'
02:38:12 <lambdabot> Just *Exception: Prelude.undefined
02:38:13 -!- MDude has changed nick to MSleep.
02:38:25 <elliott_> oerjan: Yittra, in NomicWorld, ninety-three (or ninety-two, I don't know)
02:38:25 <lambdabot> Just *Exception: Prelude.undefined
02:38:32 <elliott_> Get a life, lindrum (Yittra, Sep 28 05:59)
02:38:32 <elliott_> LIndrum, get a life and shut up. Stop cluttering the noticeboard with
02:38:33 <elliott_> your inane prattle. Go aestivate under a rock somewhere.
02:38:35 <elliott_> You see, your judgement is not in the spirit of the game, hence
02:38:37 <elliott_> is illegal. Therefore, while you may think you have cleverly found
02:38:39 <elliott_> a loophole you are just making an annoyance of yourself. To be fair, I
02:38:41 <elliott_> suppose I must admit the possibility that you were just tring to
02:38:43 <elliott_> get the game going before renouncing your 'powers' , but
02:38:45 <elliott_> 1015 and 1016 will do that anyway. In short, feep off and die.
02:38:47 <elliott_> oerjan: after the Lindrum scam
02:39:03 <elliott_> that Yittra guy did quite the colourful insults: Kindly defenestrate yourself, idiot (Yittra, Sep 28 06:13)
02:39:28 <elliott_> Madoka-Kaname: the first major scam in NomicWorld, the first online nomic
02:39:44 <elliott_> oerjan: holy shit, lindrum played agora?
02:41:21 <elliott_> CFJ 1319: Called by neil (12 Sep); Judged TRUE by Lindrum (19 Sep)
02:41:35 <elliott_> The listed Trading Accounts on the AgorEx web page are sufficient
02:41:35 <elliott_> evidence of an Agreement between each listed Player and Lindrum in
02:41:35 <elliott_> which the Player may demand that Lindrum pay em the specified
02:43:07 <elliott_> I like how Goethe hasn't changed in almost twenty years
02:43:17 -!- evincar has joined.
02:43:49 <evincar> Thanks for your help last night, those folk who were involved.
02:44:06 <evincar> Changing my types as mentioned worked out great.
02:46:15 <Patashu> You change your types as often as a girl changes her clothes
02:46:51 <evincar> That's because programming languages are for thinking up programs as much as they are for writing them.
02:48:27 * Patashu holds his arms out, twirls around
02:48:47 <evincar> Also, most of the girls I know don't change their clothes excessively.
02:49:21 <evincar> They do, however, wash them quite a lot more than the males do...
02:53:43 <evincar> Anyway, I'm off. The wireless sucks where I am anyhow.
02:53:49 -!- evincar has quit (Quit: G'night.).
02:59:27 -!- ive has joined.
02:59:33 -!- Sgeo|web has left.
02:59:40 -!- Sgeo|web has joined.
03:01:06 -!- elliott_ has quit (Remote host closed the connection).
03:01:20 -!- elliott_ has joined.
03:01:27 -!- elliott_ has quit (Remote host closed the connection).
03:01:40 -!- elliott_ has joined.
03:03:28 -!- tswett has quit (Remote host closed the connection).
03:06:15 <Sgeo|web> forever $ part elliott_ >> join elliott_
03:07:05 <Sgeo|web> Wait, join is defined elsewhere
03:08:22 <lambdabot> Data.ByteString partition :: (Word8 -> Bool) -> ByteString -> (ByteString, ByteString)
03:08:22 <lambdabot> Data.IntMap partition :: (a -> Bool) -> IntMap a -> (IntMap a, IntMap a)
03:08:23 <lambdabot> Data.IntSet partition :: (Int -> Bool) -> IntSet -> (IntSet, IntSet)
03:12:06 <Sgeo|web> Is it just my imagination, or does Learn Haskell in 10 Minutes suck?
03:12:22 <elliott_> http://norvig.com/21-days.html
03:13:17 <Sgeo|web> Hmm, why did I think that it sucked?
03:13:25 <elliott_> http://norvig.com/21-days.html
03:13:37 <Sgeo|web> elliott_: I want something I can show professors and other students >.>
03:13:49 <elliott_> you mean the incompetent idiots?
03:13:57 <elliott_> i am sure they will be inspired
03:14:07 <elliott_> also you read that page in the time it took to respond?
03:23:57 <monqy> hi guys im back did i miss the fun
03:24:48 <lambdabot> "Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Ye...
03:30:34 <lambdabot> Overlapping instances for GHC.Show.Show
03:30:54 <elliott_> ?check \x -> brokenThing x == text "Fixed."
03:31:02 <oerjan> > brokenThing undefined
03:32:39 <lambdabot> Source not found. The more you drive -- the dumber you get.
03:33:47 <Sgeo|web> > text "Hello arbitrary statements from lambdabot"
03:33:48 <lambdabot> Hello arbitrary statements from lambdabot
03:33:56 <lambdabot> Source not found. That's something I cannot allow to happen.
03:34:23 <Sgeo|web> Is it just a wrapper around a String that lambdabot directly displays, or what?
03:35:12 <lambdabot> Text.PrettyPrint.HughesPJ data Doc
03:35:12 <lambdabot> Language.Haskell.TH.PprLib type Doc = PprM Doc
03:35:12 <lambdabot> System.Directory getUserDocumentsDirectory :: IO FilePath
03:35:30 <oerjan> Doc can do a lot more, i think
03:35:59 <elliott_> Doc is a pretty-printing library
03:36:19 <elliott_> http://www.haskell.org/ghc/docs/latest/html/libraries/pretty-1.1.0.0/Text-PrettyPrint-HughesPJ.html
03:39:48 -!- PatashuXantheres has joined.
03:42:01 -!- Patashu has quit (Ping timeout: 258 seconds).
03:42:39 <Sgeo|web> > doubleQuotes $ text "And It Don't Stop"
03:47:19 <Sgeo|web> > text $ concat $ take 2 $ repeat "Hello\n"
03:47:26 <Sgeo|web> > text $ concat $ take 5 $ repeat "Hello\n"
03:47:35 <Sgeo|web> > text $ concat $ repeat "Hello\n"
03:47:43 <lambdabot> *Exception: mueval-core: signal: 15
03:47:52 <Sgeo|web> > text $ concat $ take 20 $ repeat "Hello\n"
03:48:06 <Sgeo|web> > text $ concat $ take 12 $ repeat "Hello\n"
03:53:05 <oerjan> > var $ cycle "Hello\n"
03:56:34 <Sgeo|web> How do I get from a @hoogle result to a link?
03:57:53 <Sgeo|web> The library page where the result was found
03:59:49 <Sgeo|web> @hoogle (a -> b) -> [a] -> [b]
03:59:50 <lambdabot> Prelude map :: (a -> b) -> [a] -> [b]
03:59:50 <lambdabot> Data.List map :: (a -> b) -> [a] -> [b]
03:59:50 <lambdabot> Control.Parallel.Strategies parMap :: Strategy b -> (a -> b) -> [a] -> [b]
03:59:56 <lambdabot> http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html
04:00:58 <Sgeo|web> What's the difference between Hoogle and Hayoo? I don't think Hayoo does types, does it? But does it search all of Hackage or something?
04:01:16 <elliott_> hayoo does less advanced things with types.
04:01:34 <oerjan> <Sgeo|web> How do I get from a @hoogle result to a link? <-- use the hoogle website
04:03:24 -!- elliott__ has joined.
04:04:50 -!- atehwa_ has joined.
04:05:20 <elliott__> oerjan: what happens when you stop having qualia, help?
04:05:35 -!- glogbackup has quit (Ping timeout: 252 seconds).
04:05:35 -!- atehwa has quit (Read error: Operation timed out).
04:05:35 -!- elliott_ has quit (Read error: Connection reset by peer).
04:05:35 -!- PatashuXantheres has quit (Ping timeout: 252 seconds).
04:10:36 <lambdabot> Prelude ($!) :: (a -> b) -> a -> b
04:10:36 <lambdabot> Data.Function ($) :: (a -> b) -> a -> b
04:10:49 <lambdabot> Control.Applicative (<*>) :: Applicative f => f (a -> b) -> f a -> f b
04:10:49 <lambdabot> Control.Monad ap :: Monad m => m (a -> b) -> m a -> m b
04:10:49 <lambdabot> Control.Applicative (<**>) :: Applicative f => f a -> f (a -> b) -> f b
04:11:03 <lambdabot> Prelude map :: (a -> b) -> [a] -> [b]
04:11:04 <lambdabot> Data.List map :: (a -> b) -> [a] -> [b]
04:11:22 <Madoka-Kaname> @djinn ((a -> b) -> [a] -> b) -> [a -> b] -> a -> [b]
04:12:31 <oerjan> Madoka-Kaname: sequence in the (->) monad. also the strange thing lambdabot does for flip.
04:12:50 <lambdabot> [0.8414709848078965,0.5403023058681398]
04:13:49 <lambdabot> forall t a b t1. (((a -> b) -> b) -> t -> t1) -> t -> a -> t1
04:15:12 <Madoka-Kaname> @djinn (((a -> b) -> b) -> t -> t1) -> t -> a -> t1
04:15:30 -!- oerjan has quit (Quit: Good night).
04:16:39 -!- Patashu has joined.
04:48:44 -!- elliott_ has joined.
04:51:43 -!- elliott__ has quit (Ping timeout: 248 seconds).
04:54:58 <fizzie> A habitual esolanger's (likely) advantage in Haskell: pointless stuff comes naturally.
05:01:23 -!- Zwaarddijk has quit (Ping timeout: 258 seconds).
05:01:27 -!- Zwaarddijk has joined.
05:06:05 <pikhq_> fizzie: More importantly, something being odd is *not* considered an insurmountable barrier.
05:07:20 <Sgeo|web> Am I considered a habitual esolanger?
05:07:30 <Sgeo|web> Or just an inhabitant of esolang...er
05:11:55 -!- elliott_ has quit (Remote host closed the connection).
05:14:09 -!- elliott_ has joined.
05:56:34 -!- elliott_ has quit (Remote host closed the connection).
05:58:04 -!- elliott_ has joined.
06:02:42 -!- elliott_ has quit (Ping timeout: 260 seconds).
06:13:50 -!- ive has quit (Ping timeout: 276 seconds).
06:49:01 <lambdabot> forall a b. (a -> b) -> [a] -> [b]
06:59:20 -!- pikhq has joined.
07:02:19 -!- pikhq_ has quit (Ping timeout: 258 seconds).
07:02:48 -!- nooga has joined.
07:11:16 -!- monqy has quit (Quit: hello).
07:15:33 -!- ive has joined.
07:23:53 -!- BAPU has joined.
07:24:03 -!- BAPU has quit (Client Quit).
08:43:16 -!- copumpkin has quit (Ping timeout: 244 seconds).
08:43:42 -!- copumpkin has joined.
08:48:13 -!- ive has quit (Quit: leaving).
08:49:26 -!- Vorpal has joined.
09:17:08 -!- pikhq_ has joined.
09:17:27 -!- pikhq has quit (Ping timeout: 258 seconds).
09:30:22 -!- ais523 has joined.
09:43:14 -!- ais523 has quit (Read error: Connection reset by peer).
09:45:16 -!- ais523 has joined.
09:54:37 -!- CakeProphet has quit (Ping timeout: 260 seconds).
09:59:59 -!- ais523 has quit (Read error: Operation timed out).
10:03:12 -!- jonmacuse has joined.
10:04:11 -!- jonmacuse has quit (Quit: Leaving).
10:08:30 -!- cheater_ has quit (Excess Flood).
10:08:59 -!- cheater_ has joined.
10:12:17 -!- ais523 has joined.
10:13:19 <ais523> gah, Compiz has stopped working for no apparent reason
10:13:29 <ais523> it can't find the graphics card; not even rebooting helps
10:13:45 <ais523> let me try another program that uses the graphics card
10:14:40 <ais523> X Error of failed request: BadLength (poly request too large or internal Xlib length error)
10:14:49 <ais523> I wonder what's up with my graphics card?
10:16:59 <Vorpal> ais523, Does plain 2D graphics work?
10:17:22 <ais523> but doing anything that should involve a 3D graphics card fails
10:17:45 <ais523> nothing but security updates
10:17:45 <Vorpal> like to kernel or X11 or whatever
10:17:52 <ais523> I can check if any affected packages likely to be involved
10:18:44 <ais523> xserver-common (2:1.7.6-2ubuntu7.6) to 2:1.7.6-2ubuntu7.8
10:18:54 <ais523> looks very much like it might be at fault
10:19:21 <ais523> let me install the older version
10:19:25 <Vorpal> ais523, also if nothing else works you might want to try powering off and unplugging (plus removing battery if a laptop) then wait for half a minute or such. And then power it on again. Helped me with some weird GPU issues once.
10:19:52 <Vorpal> ais523, good thing I didn't upgrade that on my laptop yet then
10:20:54 <ais523> hmm, aptitude tried to interpret my request as uninstalling libvpx0 and upgrading X to the latest version, as it couldn't find the specific old version I mentioned
10:21:50 <ais523> I tried apt-get instead, and it errored out on the specific version mentioned
10:21:56 <ais523> which is a more sensible interpretation, I think
10:22:06 <ais523> so, hmm, I'm stuck without the ability to undo the upgrade that broke things
10:22:57 <Vorpal> ais523, check for bug reports? Or downgrade to an even older version
10:24:05 <Vorpal> ais523, actually there seems to be an upgrade already
10:24:14 <Vorpal> ais523, 2:1.7.6-2ubuntu7.9 might be it
10:24:30 <Vorpal> changelog says it reverted a security fix for now
10:24:51 <ais523> The following packages will be REMOVED: libvpx0{u} The following packages will be upgraded: gnome-utils libgdict-1.0-6 xserver-common xserver-xorg-core
10:25:00 <ais523> yep, looks like they pushed a bad fix and only just noticed
10:25:22 <Vorpal> looks like I have the "bad" version but I didn't notice any issues
10:25:47 <Vorpal> oh wait, I haven't restarted X since the upgrade
10:26:31 -!- ais523 has quit (Quit: Restarting X).
10:27:39 -!- ais523 has joined.
10:28:20 <ais523> it still loaded Metacity by default, but changing the default to Compiz actually worked this time
10:28:50 <ais523> first time I've had a really noticeable break as a result of an update
10:40:20 <fizzie> "chromium-browser will be upgraded from version 12.0.742.112~r90304-0ubuntu0.11.04.1 to version 14.0.835.202~r103287-0ubuntu0.11.04.1", quite a jump. (All this talk about upgrades made me go look.)
10:43:57 <Sgeo|web> Does anyone even take notice of Chromium version numbers?
10:44:50 <fizzie> 14 is at least two better than 12.
10:50:46 <ais523> fizzie: well of course, how could Chrome's version number stay ahead of Firefox's otherwise?
10:51:43 <Patashu> if no one looked at chrome's version number, would it still be going up?
10:55:39 <fizzie> If a Chrome version number is incremented in the forest, and no-one is around to see it, does it still need an entry in the changelog?
11:16:54 -!- GreaseMonkey has quit (Quit: The Other Game).
12:01:37 -!- ais523 has quit (Remote host closed the connection).
12:02:17 -!- variable has quit (Excess Flood).
12:03:02 -!- variable has joined.
12:06:48 <Patashu> Chrome developers should write a program that checks firefox's version number and increments chromes' until it's 10%+/-rand() higher
12:12:52 -!- cheater_ has quit (Quit: Ex-Chat).
12:13:38 <Patashu> then firefox developers make one of their own
12:13:43 <Patashu> and the largest integer known to man is discovered
12:25:26 <fizzie> Did you see that thing about algorithmic book prices in Amazon? http://www.michaeleisen.org/blog/?p=358
12:25:32 <fizzie> "Amazon’s $23,698,655.93 book about flies"
12:25:41 <fizzie> It may in fact have been linked on this very channel.
12:26:59 <Patashu> how about http://www.telegraph.co.uk/news/uknews/8837736/Man-orders-size-14.5-slipper-and-gets-size-1450-after-mistranslation-in-China.html
12:36:52 -!- Ngevd has joined.
12:49:56 <Ngevd> I liked today's IWC annotation
12:55:23 -!- Zetro has joined.
12:57:20 -!- ais523 has joined.
12:58:30 -!- MSleep has changed nick to MDude.
13:07:48 <Ngevd> What's an interesting SKI program (combination?)?
13:09:23 -!- ais523 has quit (Remote host closed the connection).
13:11:05 <Patashu> what would qualify as interesting?
13:11:18 <Ngevd> Really, something short that looks good
13:11:25 <Ngevd> Doesn't help, does it?
13:12:21 -!- ais523 has joined.
13:23:29 -!- iamcal has quit (Remote host closed the connection).
13:26:25 -!- ais523 has quit.
13:26:38 -!- ais523 has joined.
13:33:49 -!- derdon has joined.
14:00:04 -!- iamcal has joined.
14:02:12 <Patashu> Does anyone here use etherpad? I signed up for it, but the email for it hasn't arrived.
14:02:22 <Patashu> I want a service like 'downforeveryoneorjustme.com' but for sites that send out emails when you register
14:05:22 <Patashu> I register again with my gmail instead of my hotmail and it works instantly
14:05:38 <Patashu> I don't know if I typoed my email or if it didn't like it or if it was a fluke or...
14:05:52 -!- copumpkin has quit (Ping timeout: 260 seconds).
14:06:16 -!- copumpkin has joined.
14:23:31 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:47:47 -!- copumpkin has joined.
14:50:19 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .).
14:54:24 -!- hagb4rd has quit (Ping timeout: 248 seconds).
15:07:19 -!- pikhq has joined.
15:10:19 -!- pikhq_ has quit (Ping timeout: 258 seconds).
15:10:33 -!- ais523 has quit (Remote host closed the connection).
15:14:24 -!- augur has quit (Remote host closed the connection).
15:31:16 -!- Ngevd has quit (Ping timeout: 260 seconds).
15:46:27 -!- augur has joined.
15:54:46 -!- ais523 has joined.
16:05:23 -!- elliott has joined.
16:13:23 -!- sllide has joined.
16:24:05 -!- derrik has joined.
16:40:58 <HackEgo> 609) <Phantom_Hoover> OK, making myself emergency doctor on the advice of IRC.
16:41:10 <HackEgo> 513) <elliott_> its UNEBARBEL
16:41:11 <HackEgo> 179) <fizzie> It's like mathematicians, where the next step up from "trivial" is "open research question". <fizzie> "Nope... No...This problem can't be done AT ALL. This one--maybe, but only with two yaks and a sherpa. ..."
16:41:11 <HackEgo> 423) <oklopol> so about jacuzzis, do they usually have a way to make it it not heat but freeze the water?
16:41:11 <HackEgo> 315) <Phantom_Hoover> elliott, incidentally, I started my explorations again after getting bored of the Himalayas.
16:44:32 <Gregor> Booting from the grub-rescue prompt LIKE A BOSS.
16:45:27 <HackEgo> 276) <Vorpal> !bfjoust test (-)*10000 <EgoBot> Score for Vorpal_test: 12.9 <Vorpal> yay
16:45:29 <HackEgo> 9) <Madelon> Lil`Cube: you had cavity searches? <Lil`Cube> not yet <Lil`Cube> trying to thou, just so I can check it off on my list of things to expirence
16:45:31 <HackEgo> 19) <fungot> oerjan: are you a man, if there weren't evil in this kingdom to you! you shall find bekkler! executing program. please let me go... put me out! he's really a tricycle! pass him!
16:45:40 <HackEgo> 226) <Sgeo> Oh. Stuff that uses actual physical numbers stemming from science. Bleh *gets bored*
16:45:41 <HackEgo> 612) <fungot> elliott: mr president, commissioner, i fully accept that description when it comes to human rights. yes, with an average fat content of chocolate, and we are using double standards! we all know that under present legislation and also in relation to standardization bodies. if i do not want.
16:46:27 <ais523> wow, I ended up reading "A Brief, Incomplete and Mostly Wrong History of Programming Languages" again
16:46:33 <ais523> and am utterly shocked at how recent Java is
16:46:53 <ais523> I assumed it was older than I am
16:47:11 <elliott> nah, it's very much a 90s internet boom thing
16:47:16 <ais523> and I assumed it predated most currently-popular scripting languages, too
16:47:18 <elliott> ais523: remember that it originated to program set top boxes
16:47:39 <ais523> sorry, I'm in a mood where I vaguely expect to be trolled atm
16:47:40 -!- sllide has quit (Ping timeout: 260 seconds).
16:47:46 <elliott> and then they realised nobody wanted to do that, and this Web thing is totally catching on
16:47:52 <elliott> so they decided to retarget it
16:48:10 -!- Ngevd has joined.
16:48:10 <elliott> pointless trivia: it was called Oak while it was for set-top boxes
16:48:22 <elliott> ais523: I do find it kinda crazy that Python is older than Java, though
16:48:41 <ais523> hmm, are virtual machines (in the JVM sense) similar in age to Java, or much older?
16:48:47 <elliott> ais523: in fact, Ruby might even be older
16:49:02 <elliott> I can't think of an example but there were definitely VMs in the eighties
16:49:19 <ais523> ah, Smalltalk's VM-based?
16:51:27 <elliott> I wish Ilari was still around
16:51:30 <elliott> I want to know what's up with IP
16:51:47 <Ngevd> Instruction Pointer?
16:51:51 <Ngevd> Internet Protocol?
16:52:15 -!- Ngevd has quit (Client Quit).
16:53:48 <Madoka-Kaname> http://blog.wolfram.com/2010/12/17/the-mathematica-one-liner-competition/
16:55:05 <elliott> man that Tubular Bells is about fifty times worse than the one-liner chiptunes :P
16:55:37 <ais523> elliott: they do that competition every so often
16:55:49 <elliott> ais523: "While this expression is a disaster practically, it has a certain conceptual appeal that made up for it hanging the judges’ machines." --Wolfram
16:55:51 <ais523> all it really does is show off what the standard library is good at doing
16:56:04 <elliott> ais523: That's my one-liner explanation of Mathematica.
16:56:25 <elliott> http://blog.wolfram.com/data/uploads/2010/12/OneLiner9.png for very large values of 137
16:58:02 <Madoka-Kaname> How hard would it be to reimplement Mathematica's functionality as a Haskell library?
16:58:31 <elliott> mathematica is a few gigabytes of library
16:59:31 <Madoka-Kaname> If it does, that dishonorable mention should actually some stuff, right?
17:04:18 <elliott> Mathematica uses term rewriting, so it's hard to replicate its interface in something like Haskell
17:04:36 -!- monqy has joined.
17:05:03 <coppro> Some things would also be a pain
17:05:19 <coppro> Haskell is horrible at things like type-safe sized data structures
17:05:33 <coppro> (e.g. matrices typed by size)
17:05:37 <elliott> coppro: Mathematica doesn't have those
17:05:42 <elliott> so I don't know what you're going on about
17:06:21 <elliott> anyway, haskell isn't terrible at those, they're just a pain to write
17:06:25 <coppro> we should just use coq
17:06:37 <coppro> elliott: I consider a pain to write isomorphic to terrible
17:06:52 <elliott> coppro: so anything hard to implement is terrible to use?
17:07:21 <coppro> No, but such a matrix system would also be horrible to use
17:07:46 <elliott> shrug; not if you were fine with predefined operations
17:07:54 <elliott> manual loops would be a bit of a pain
17:08:51 <coppro> Matrix (S (S (S (S Z)))) (S (S (S (S (S (S (S Z)))))))
17:12:40 <elliott> <coppro> Matrix (S (S (S (S Z)))) (S (S (S (S (S (S (S Z)))))))
17:17:47 -!- derrik has quit (Ping timeout: 252 seconds).
17:19:50 <Sgeo|web> elliott: I wanted to see if I was still connected
17:20:06 <elliott> messages are echoed locally
17:20:57 <Sgeo|web> Actually, when I get disconnected, webchat seems to stop echoing my messages.
17:21:00 <ais523> I use /ctcp ping ais523
17:21:07 <ais523> which gets abbreviated to /ping ais523 in practice
17:21:21 <ais523> I tend to use /ping ais523 even when I'm not actually ais523; it still works, because the error message comes from the server
17:21:38 <elliott> might as well just /ping q :P
17:21:43 <elliott> but yeah, I've got in the habit of doing /topic
17:22:27 <Sgeo|web> say /topic complains about insufficient arguments
17:23:07 <Sgeo|web> On this webchat it does for some reason
17:23:12 <ais523> elliott: oh dear: today I was trying to explain {C-style functions|static methods} to my students
17:23:17 <ais523> and used a hello world function as the example
17:23:23 <ais523> which would write hello world to arbitrary streams
17:27:20 <ais523> there's not much go on
17:27:26 <ais523> I just realised afterwards that it was a ridiculous thing to do
17:27:30 <ais523> especially when I wrote docs for it
17:28:31 <Vorpal> h<elliott> but yeah, I've got in the habit of doing /topic <-- same as me then
17:29:28 <Vorpal> <ais523> I just realised afterwards that it was a ridiculous thing to do <-- I seen worse examples from teachers than that.
17:30:16 <ais523> so my examples are bound to be silly sometimes
17:30:56 <Vorpal> ais523, not too bad then. I seen sillier planned examples and assignments.
17:31:46 <Vorpal> what was it on the exam for the database stuff now again... Oh yeah, superman bug swatting database. No it didn't make any sense.
17:32:14 <elliott> Vorpal: Sorry but that sounds like the best?
17:32:47 <Vorpal> elliott, best or worst or whatever. You can't deny it was silly :P
17:33:07 <Sgeo|web> I wrote some actually difficult for me to write Haskell code
17:33:16 <elliott> Sgeo|web: was it hello world
17:33:35 <Vorpal> Sgeo|web, don't show it to elliott. He will just poke fun at you.
17:33:46 <elliott> it's called constructive criticism
17:33:51 <fizzie> Better fun than holes.
17:33:58 <Vorpal> elliott, FSVO constructive
17:34:34 <elliott> Vorpal: should i deliberately withhold all the ways in which a given piece of code is broken and thus hold back its author????
17:35:09 <ais523> elliott: if you think that code is broken badly enough that you can produce a reasonably long list of ways in which it is broken
17:35:10 <Vorpal> elliott, I didn't say that.
17:35:15 <ais523> there are probably more ways that it's broken that you didn't catch
17:35:33 <Sgeo|web> When I'm less tired, I might ask in #haskell
17:35:45 <Vorpal> elliott, what I was complaining about was the way you *present* said criticism.
17:36:00 <Sgeo|web> But it's not broken (except for requiring users to supply a type signature), as such. It works. It's just a godawful horror
17:36:09 <elliott> "(except for requiring users to supply a type signature)"
17:36:15 <elliott> Sgeo|web: I've found the problem already
17:36:23 <elliott> you're trying to do something stupid with the type system; stop it
17:36:43 <Vorpal> elliott, you do weird things to the type system quite often
17:36:55 <Sgeo|web> I might be using the type system incorrectly, but I'm abusing monads, not the type system
17:37:11 <elliott> Vorpal: yes, because I'm a rather good Haskell programmer
17:37:19 <elliott> Vorpal: and it is always strictly for fun
17:37:22 <Sgeo|web> (Specifically, I'm doing convoluted stuff with a State monad when I feel I should probably be using a State and Writer monad stack)
17:37:26 <elliott> copumpkin: compared to Sgeo|web
17:37:43 <copumpkin> you should combine lenses with your state
17:37:50 <Sgeo|web> And probably also separating long lines into parts or something
17:38:56 <Sgeo|web> So, if my state was a tuple and I wanted to update the first one, lenses would make that convenient?
17:39:20 <Sgeo|web> Wow, when I write it like that, I think I could have just done (firstpart, secondpart) <- get
17:39:30 <Sgeo|web> And not fiddle with fst and snd
17:39:52 <monqy> data-lens even has special stuff for dealing with monadstate iirc
17:40:07 <elliott> Sgeo|web: (<$>) :: (a -> b) -> (c,a) -> (c,b)
17:40:34 <monqy> and also lenses for tuples
17:40:40 <monqy> couples specifically
17:41:07 <Sgeo|web> Of course there's a library for making what I did easier that I had no clue about, why wouldn't there be?
17:41:26 <Sgeo|web> That will always be the case for any value of "what I did"
17:41:34 <elliott> lenses are overkill for a tuple
17:41:55 <Sgeo|web> http://pastie.org/private/1aazxbtt5gohfmmp4uudfa
17:42:09 <Sgeo|web> Some of the comments are obsolete
17:42:17 <monqy> arrow is good for tuple manipulation, bad for other things
17:43:30 -!- Ngevd has joined.
17:43:39 <Sgeo|web> http://pastie.org/private/sqqcpinl5hke0fuawknpka example usage
17:44:29 <elliott> your commenting style sucks, put them above the relevant lines
17:44:42 <elliott> Sgeo|web: evalState/execState means you run the computation twice
17:44:47 <lambdabot> forall s a. State s a -> s -> (a, s)
17:57:04 -!- sllide has joined.
17:59:47 -!- Slereah_ has quit (Ping timeout: 260 seconds).
18:05:48 -!- Slereah_ has joined.
18:15:51 -!- Slereah_ has quit (Remote host closed the connection).
18:16:16 -!- Slereah_ has joined.
18:16:41 <Sgeo|web> I knew about runState just thought that evalState and execState would be more convenient to use in my case
18:17:19 <elliott> Sgeo|web: More convenient vs. computing everything twice.
18:17:27 <elliott> Anyway, it's not inconvenient, just deconstruct it in a where clause.
18:17:49 <Sgeo|web> I need to start using where clauses more
18:18:40 <Ngevd> Sgeo|web, having discovered the wonder of the clause, changed his grammar techniques
18:42:58 -!- sebbu2 has joined.
18:42:58 -!- sebbu2 has quit (Changing host).
18:42:59 -!- sebbu2 has joined.
18:43:52 -!- sebbu has quit (Ping timeout: 240 seconds).
18:59:26 -!- pikhq_ has joined.
18:59:33 <Ngevd> Turns out, I can't make an IRC bot
18:59:40 -!- pikhq has quit (Ping timeout: 244 seconds).
18:59:56 <Ngevd> ais523, the spambots have started with gambling sites
19:00:07 <fizzie> fungot: Help Ngevd make an IRC bot, you're the expert.
19:00:07 <fungot> fizzie: so, let's say i call them mindless games. if we hit every stupid person, any person going, tough one. if we solve it,... it's what that guy in medina, a village near the mystic mountain" 65,000,000 b. c.? yes, i'd have done something very brave! he's probably up north, to guardia!!! let's toast? or decide. fnord 22:11, 17, 18, 19, 20, 21, 22, 22, ...too much output!
19:00:12 <ais523> Ngevd: they started that a bit earlier
19:00:14 <fizzie> (Almost typed "you're the export".)
19:00:46 <Ngevd> I reckon, if I knew anything about the IRC protocol, I could probably make Pietbot
19:00:59 <ais523> the IRC protocol is really pretty simple
19:01:14 <Ngevd> I'll learn it at the weekend
19:01:21 <ais523> you start off by writing USER username anything anything :realname
19:01:31 <ais523> then PASS password (if you need a password to log on)
19:01:35 <ais523> and that's enough to connect
19:01:42 <ais523> (the username's the bit before the @ in your whois info)
19:01:50 <ais523> then you join channels with JOIN #esoteric
19:01:59 <ais523> and send messages with PRIVMSG #esoteric :this is a message
19:02:01 <fizzie> ais523: Can you join any channel with "JOIN #esoteric"?
19:02:06 <ais523> (the colon means "quote to end of line")
19:02:12 <ais523> fizzie: depends on the server, I guess
19:02:24 <ais523> you can join #esoteric, at least
19:02:26 <elliott> <ais523> you start off by writing USER username anything anything :realname
19:02:27 <ais523> that counts as "any channel"
19:02:43 <ais523> NICK comes last, USER and PASS can be either way round
19:02:51 <elliott> ais523: USER <user> <mode> <unused> <realname> (RFC 2812)
19:02:55 <ais523> and the second and third args are habitually ignored
19:02:58 <elliott> nobody's used the 1459 USER since, um, ever
19:03:13 <ais523> what's /meant/ to go in the <mode> field?
19:03:19 <ais523> I've tried all sorts of random stuff htere
19:03:26 <ais523> and Freenode never seems to care
19:03:31 <elliott> 8 is the usual thing, I think
19:03:33 <ais523> ah, I don't think I tried a number
19:03:35 <elliott> ais523: it'll just use a default if you pass something invalid
19:04:07 <ais523> like "localhost", that one's always fun
19:04:24 <ais523> it's like using localhost in a HELO in SMTP (which actually works, and is often the best option)
19:05:05 <Vorpal> elliott I seem to remember you saying something to the effect of tzdata being overcomplicated for the job?
19:05:21 <elliott> Vorpal: I don't think TZ variables are a pain to set; DST rarely changes
19:05:29 <elliott> it's certainly convenient, but I don't think it's that important
19:05:41 <Vorpal> elliott, well just looked at changelog of tzdata: "Palestine suspends DST during Ramadan in 2011"
19:05:43 <ais523> elliott: what if you live in a country where it changes every few years?
19:05:52 <elliott> Vorpal: and probably it should just be a filesystem hierarchy of TZ variable settings, rather than a complicated binary format
19:06:02 <elliott> ais523: then your life is already hell :)
19:06:02 <ais523> I suppose the UK's worse, it changes every six months or so here
19:06:11 <Vorpal> or "West Bank changes date for DST end in 2011 to Sep 30th"
19:06:17 <elliott> <elliott> Vorpal: and probably it should just be a filesystem hierarchy of TZ variable settings, rather than a complicated binary format
19:06:21 <elliott> I didn't say tzdata was useless in concept
19:06:27 <elliott> I just think that it's overkill as it is
19:06:36 <Vorpal> ais523, it changes according to a sensible pattern iirc?
19:06:46 <Vorpal> or at least predictable pattern
19:06:48 <ais523> elliott: using Metacity a bit earlier reminded me of how much I prefer Compiz
19:06:51 <ais523> Vorpal: yes, I was making a joke
19:07:07 <ais523> not a very good one, but I still expected most people to catch it
19:07:08 <Vorpal> ais523, anyway Israel used to have DST different for every year
19:07:33 <elliott> DST is hell on earth, anyway
19:08:07 <fizzie> Yeah, I just use Swatch Internet Time all the time.
19:08:22 <fizzie> Biel Mean Time for the win, and so on.
19:08:53 <elliott> holy shit, they removed the Eq/Show superclasses of Num???
19:09:01 <Vorpal> why is it called Biel btw?
19:09:05 <fizzie> (Swatch Internet Time is based on the UTC+1 observed at Swatch's headquarters in Switzerland.)
19:09:13 <fizzie> Biel, Switzerland, to be more precise.
19:09:17 <elliott> well going by http://hackage.haskell.org/trac/ghc/changeset/b59fe25a24c4b913a9935c71b1b42a060ab53dcc/utils and http://haskell.1045720.n5.nabble.com/Proposal-Remove-Show-and-Eq-superclasses-of-Num-td4808712.html
19:10:45 <fizzie> Instead of the 1000-".beat" split of the @-time, I sort-of like the hexclock way of having a midnight of 0000, a noon of 8000, and one hex-second (about 1.32 regular seconds) before midnight as ffff.
19:11:36 <Vorpal> elliott, I'm not sure how sensible removing Eq is? When would you want a Num without Eq?
19:12:06 <elliott> ais523: yes, reader monad interpretation
19:12:11 <fizzie> (I'm not as sure I like the Hexclock way of splitting it as A_BC_D and to call the middle bit minutes.)
19:12:15 <elliott> ais523: (f `op` g) x = f x `op` g x, etc.
19:12:34 <elliott> fizzie: "Furthermore, the essentially pointless and often confusing A.M. and P.M. suffixes have been eliminated. Anyone who has accidentally set his or her alarm clock for seven P.M. instead of seven A.M. can appreciate this."
19:12:35 <ais523> elliott: I don't see offhand how that makes it numeric
19:12:57 <elliott> ais523: well, it's Num b => Num (a -> b)
19:13:02 <Vorpal> elliott, don't all alarm clocks use 24h anyway?
19:13:04 <ais523> fizzie: I like decimal time
19:13:05 <elliott> fromInteger = const . fromInteger, etc.
19:13:19 <ais523> and normally split it as 3 millidays with 2 centimillidays (we need a better prefix for that)
19:13:34 <ais523> it differs from swatch internet time in that it follows timezones rather than being fixed at UTC+1
19:13:52 <ais523> elliott: but it produces really nicely-sized time units
19:13:55 <Vorpal> ais523, why UTC+1 for swatch btw? Why not UTC
19:14:06 <elliott> Vorpal: not only do you have no context
19:14:08 <pikhq_> ais523: Hmm. What's 2 centimillidays in days, anyways?
19:14:11 <elliott> <fizzie> (Swatch Internet Time is based on the UTC+1 observed at Swatch's headquarters in Switzerland.)
19:14:13 <elliott> <fizzie> Biel, Switzerland, to be more precise.
19:14:21 <Vorpal> elliott, I missed that line
19:14:33 <ais523> pikhq_: one of them is a little smaller than a second
19:14:38 <Vorpal> I never read it, thus it is unrelated to my memory
19:14:39 <elliott> <dafis> elliott: IT'S COMMITTED, IN 7.4 THEY WON'T BE
19:14:46 <ais523> an 86400/100000th of a second, to be precise
19:14:51 <pikhq_> ais523: Well, I'm wondering if I can come up with a better prefix is why I ask.
19:15:02 <pikhq_> 2 centimillidays = x days. Solve for x por favor.
19:15:06 <ais523> err, I could have guessed that…
19:15:29 * pikhq_ seriously has no idea how concatenating metric prefixes should work.
19:15:31 <ais523> pikhq_: oh, that's not what I meant
19:15:38 <ais523> I mean 3 digits go to millidays, and another 2 to centimillidays
19:15:50 <pikhq_> Yes, but what the eff is a centimilliday?
19:15:51 <ais523> "milliday" is a nice enough name, anyway
19:15:58 <ais523> but I'm not sure what to call the subdivision
19:16:05 <ais523> pikhq_: like dollars and cents, except millidays and centimillidays
19:16:30 <ais523> it's a hundredth of a thousandth
19:16:54 <fizzie> ais523: Well, hextime has "naturally" three levels of units; 1.32s, 5m37.5s and 1h30m.
19:17:24 <pikhq_> The prefix shall hereby be kotsu-.
19:17:26 <ais523> decimal time has centidays which are around 15 minutes, which is a great division
19:17:39 <ais523> and kotsudays which are a bit less than a second
19:17:48 <Vorpal> ais523, why is that a great division?
19:18:02 <ais523> Vorpal: 15-minute chunks are the chunks human schedules nearly always operate on
19:18:13 <pikhq_> (etymology: 10^-5 unit prefix for traditional Japanese units)
19:18:29 <Vorpal> ais523, only because our system is currently based on seconds and minutes
19:18:43 <ais523> Vorpal: that, and the fact that it's a conveniently-sized unit
19:18:53 <ais523> why don't we use, say, 10-minute chunks? or 12-minute chunks?
19:19:35 <Vorpal> ais523, well yes, but I suspect that anything between say 13 minutes and 20 minutes would be acceptable as a standard schedule unit, had those fit better with our time units.
19:19:53 <elliott> <Vorpal> there are other great divisions, ergo that one isn't
19:20:07 <fizzie> ais523: Sorry, 4 levels of units, of course: 1.32s, 21.09s, 5m37.5s and 1h30m. Anyway, the 1.32s hexsec is a reasonable "short time", and the 1h30m hexhour is a reasonable "longer time"; it's just the 21.09s hexminute that's a bit silly-short.
19:20:20 <ais523> well, a centiday isn't exactly 15 minutes
19:20:26 <pikhq_> Man. Metrication in Japan must have been really easy. Their traditional units are metric.
19:20:27 <Vorpal> elliott, what I was saying: why should we stick to the current division if we design a new unit system anyway
19:20:44 <elliott> Vorpal: You didn't actually say that.
19:20:53 <Vorpal> elliott, nor did I say what you claimed
19:21:10 <elliott> Anyway, fifteen minutes are a good unit, so if it falls naturally out of a system, that is a point in favour of that system.
19:21:55 <Vorpal> well yes, but anything near that sort of size is just as good. What I'm claiming here is that 15 minutes isn't the optimum. In fact I think slightly longer would be better.
19:23:02 <olsner> fungot: does it defurbulate VCL's crudgenickle sklep?
19:23:03 <fungot> olsner:, so i'd have to consider that although the reduction in actual transportation section from former friend lives, their door had my computer with full u+ support" then they both bowed low. just keep the safe or tub and emptied it
19:23:16 <fizzie> Also you get a reasonable approximation of current units by doing a:bb:cc where a = 0..f, bb = 00..3f, cc = 00..3f, which gives 0:00:01 as 1.32s (a second-analogue), 0:01:00 as 84.374s (a minute-analogue) and 1:00:00 as 1h30m (an hour-analogue), but that's no longer as clean as just the four hexdigits.
19:24:46 <elliott> fizzie: And you can truncate-round it using big endian fixed-point, right?
19:26:33 <fizzie> Yes, you get the time in coarser units (truncated) by just reading a shorter number if you are big-endian.
19:27:24 <elliott> fizzie: Another victory of big-endian.
19:28:34 <ais523> same with little-endian, you just read from the other end
19:28:48 <fizzie> ais523: Yes, but you need an address adjustment.
19:29:22 <fizzie> ais523: (There was a discussion (if you can call it that) on this other channel on the little-endian property of being able to convert to narrower integers without adjusting the address.)
19:29:30 <Vorpal> on the other hand you need no address adjustment in little endian if you just want the seconds, or the seconds and the minutes
19:29:32 <ais523> fizzie: I know, I was in it
19:29:43 <ais523> in fact, I even believe I pointed out that it was the main advantage of little-endian
19:29:45 <elliott> fizzie: It was -minecraft.
19:29:51 <elliott> Though we've talked about it previously here.
19:29:57 <ais523> (it's also the reason gcc-bf is little-endian, incidnetally)
19:30:36 <ais523> is -minecraft still in use?
19:31:14 -!- tiffany has joined.
19:31:33 <elliott> fizzie: Can you believe I'm still working on them n-grams?
19:46:25 -!- CakeProphet has joined.
19:46:26 -!- CakeProphet has quit (Changing host).
19:46:26 -!- CakeProphet has joined.
19:47:56 <elliott> Oh, it's the Pake Crophet.
19:49:20 -!- pikhq_ has quit (Read error: Operation timed out).
19:49:36 -!- pikhq has joined.
20:01:42 -!- Vorpal has quit (Ping timeout: 260 seconds).
20:04:14 <Ngevd> Is cycle equivalent to (concat . repeat)?
20:13:27 <Ngevd> That's rapidly approaching Gregor
20:18:38 -!- sebbu2 has changed nick to sebbu.
20:20:08 -!- tswett has joined.
20:21:57 -!- oerjan has joined.
20:26:48 <fizzie> Cake "Ark-Tech-Pope" Prophet.
20:31:26 * elliott wishes there was some standard (Map a Int, Int) structure
20:31:39 <elliott> with "index :: a -> (Map a Int, Int) -> (Int, (Map a Int, Int)"
20:31:46 <elliott> which inserts with highest value if it's not present
20:31:53 <elliott> ...and presumably has some more compact in-memory representation...
20:32:19 <tswett> elliott: so the Int on the end is the highest value already present?
20:32:34 <elliott> yes, or the next value to assign, it doesn't matter much -- presumably the structure would be abstract
20:35:46 -!- Ngevd has quit (Quit: Leaving).
20:37:01 <fizzie> elliott: If you DIY, are you going to call it Trogdor the Internator?
20:37:20 <ais523> I've been here all along, but felt like spouting a meme somewhere
20:37:22 <elliott> fizzie: If I DIY as opposed to what?
20:37:33 <ais523> and then realised that there was one whose only purpose was to be mentioned randomly
20:37:49 <HackEgo> 2008-03-20.txt:15:37:24: <oklofok> ais523: just oing
20:37:50 <elliott> fizzie: Anyway, I suppose I could call it that. The programs right now are degrade, intern, and gentry.
20:38:00 <fizzie> elliott: As opposed to finding one, which, I admit, sounds kinda unlikely.
20:38:06 <ais523> hmm, I'm not sure what date I would have guessed for that
20:38:15 <elliott> fizzie: Well, it's already mostly-written.
20:38:36 <elliott> fizzie: Do you know of a FUSE filesystem that presents a directory full of compressed files (e.g. .gz) as if they were uncompressed? :p
20:38:43 <elliott> `logurl 2008-03-20.txt:15:37:24:
20:38:46 <HackEgo> http://codu.org/logs/log/_esoteric/2008-03-20
20:39:12 <ais523> elliott: Ubuntu has "archive mounter", but that's not quite the same thing
20:39:55 <fizzie> Data.Symbol has intern :: String -> Symbol, with Symbol !Int String, but it only has a single map, I suppose. (Just a quick googling.)
20:40:20 <elliott> fizzie: Yees, but in this case it isn't the typical intern-table things; I mean, I'd probably use Kmett's package if I wanted that.
20:40:33 <elliott> fizzie: I'm not trying to store symbols or the like efficiently, I need a first-class intern table.
20:41:08 <fizzie> elliott: There's all kinds of transparent-compression fuse things, but not sure about that. fuze-lzofs sounds like it'd do it, but that seems to be a dead project with the web-page gone.
20:41:41 <elliott> (It's just that, since intern has to process every file in one run, I'm going to have to build in the decompress/recompress stage into it.)
20:41:45 <elliott> (Which just seems _gross_.)
20:41:47 <fizzie> And there's fuse-archivemount, but that's probably like Ubuntu's archive mounter, to mount a single archive somewhere.
20:41:56 <elliott> I suppose it could do it in multiple runs by saving the intern table and reloading it, but that sounds pointlessly slow for no reason.
20:42:01 <ais523> elliott: strangely, that log is the same day I first IRCed over telnet
20:42:34 <ais523> <ais523_> [CTCP] Received CTCP-PING reply from ais523: -76 seconds.
20:43:32 <ais523> related, also the day I invented CTCP SWAPNICK
20:43:38 <ais523> it has never yet been implemented, which makes me sad
20:44:10 <elliott> -Zetro- VERSION ((\w+) (v?(\d+(?:[a-z]|(?:\.\d+[a-z]?)*(?:[_-](?:\d+[a-z]?|[a-z]?\d*))?)))(?: (.*))?)
20:44:23 <ais523> Madoka-Kaname: it causes each client to send each other the messages it wants to post, and post as each other, from then on
20:44:23 <fizzie> elliott: I guess you could use any transparent-compressed file system by "uncompressing" the files into it beforehand, but that'd tie the data into the particular implementation what it uses.
20:44:41 <ais523> some sort of daemon would be needed to handle quits correctly
20:44:45 <ais523> unless you swapped back just before quitting
20:45:20 <elliott> fizzie: Yeaah. I think I'd prefer to just add some unzip/zip runs into intern.hs.
20:45:21 <Zetro> elliott: Like my version? :)
20:45:23 <ais523> (in CLC-INTERCAL, it's possible to steal a filehandle from another program, which means that the INTERCAL impl has to keep running after it quits; as a corollary, a program that opens any file at all is making it visible to the entire world forever)
20:45:32 <elliott> Zetro: It's... some version.
20:45:34 <ais523> Madoka-Kaname: I suppose so, but it was meant to be client-level
20:46:06 <Zetro> It's every version!
20:46:27 <elliott> Zetro: The best version. (What client do you actually use?)
20:47:25 <Zetro> atm I use XChat and AndChat
20:47:35 <ais523> hmm, what could be awesome: upon someone CTCP VERSIONing you, you CTCP VERSION them then echo the reply
20:48:03 <elliott> ais523: so if two people use it, they agree that they're both using the client _|_? :-)
20:48:24 <ais523> elliott: eventually one of them gets bored
20:48:30 <ais523> at which point the other's version doesn't really matter
20:48:34 <ais523> that is, quits or whatever
20:49:06 <Sgeo|web> Hey, a lot of people use _|_ now </boring>
20:49:36 <Sgeo|web> (e.g. everyone whose client doesn't reply to CTCP VERSION)
20:50:03 <fizzie> Thanks to XChat and irssi having different CTCP PING payloads, I get silly-looking values in the other client when I ping from one. Stuff like "CTCP PING reply from fizziew: -1319088817776269.-17 seconds." Or "Ping reply from fizziew: 1319088736.35 second(s)."
20:50:31 <elliott> it's an intercal version number :P
20:50:34 <ais523> elliott: you can tell a lot about the rounding algo from that
20:50:51 <ais523> it's clearly using rounds-towards-zero division in an attempt to calculate the remainder (or something similar involving the modulus function)
20:51:35 <ais523> <okofolor> nothing! can't a guy o here anymore without being asked for a reason :O
20:51:39 <ais523> I guess that was answered
20:52:21 <fizzie> XChat uses "PING v" where d is microseconds since the epoch as a single number; irssi puts in "PING s u" where s is seconds since epoch, u number of microseconds since the last full second.
20:52:46 <ais523> so they differ by one space 90% of the time?
20:53:03 <ais523> elliott: what's with the Nomic World misquote in the topic?
20:53:11 <ais523> (I'm almost positive it's you, nobody else would do that)
20:53:31 <elliott> ais523: comex linked to the lindrum log on blognomic, so I had the chance to enjoy reading that message again
20:53:44 <Sgeo|web> I should read it at some point
20:53:46 <elliott> now we all are so privileged, thanks to me
20:54:04 <elliott> Sgeo|web: it's mostly a lot of people yelling at Lindrum and Goethe being all wispy about it
20:54:39 <Sgeo|web> Lindrum was a successful scam, right? So why would people be ... I guess I'm used to people being at least somewhat ok with scams
20:55:16 <elliott> the Lindrum scam almost certainly failed
20:55:24 <elliott> but it ripped NomicWorld apart, so it doesn't matter much
20:55:30 <elliott> hmm, or did NomicWorld reset and continue after that
20:55:34 <elliott> I forget; probably ais523 or oerjan knows
20:56:02 <Sgeo|web> Where did comex post the link?
20:56:19 <elliott> <elliott> ais523: comex linked to the lindrum log on blognomic, so I had the chance to enjoy reading that message again
20:56:47 <Sgeo|web> Where on blognomic? In a comment on a post? Because I don't see posts with links
20:57:03 <elliott> http://blognomic.com/archive/more_discussion_about_ais523s_dov/
20:57:59 <elliott> Sgeo|web: anyway, people were annoyed at Lindrum because it was early on in the game, it granted a complete dictatorship which was going to be used to restructure the ruleset, and because people thought it was illegal but there was no formal judgement process on its legality that could be done
20:58:39 <Sgeo|web> I guess with dictatorships in Agora, the dictators are usually polite
21:03:05 <Sgeo|web> too long; will read later if I am reminded
21:09:48 <oerjan> <elliott> hmm, or did NomicWorld reset and continue after that <-- afaik the lindrum scam was before i even joined nomic world. iirc the final death was simply due to admins no longer having time to maintain it.
21:10:05 <elliott> seems like it just ended game one
21:25:31 <elliott> ais523: can you donate me a really big disk, please
21:26:09 <ais523> I don't have one to donate
21:26:15 <ais523> and it'd take a while to carry it to Hexham even if I did
21:30:25 <fizzie> There are other places in the UK than Hexham?
21:36:40 <oerjan> <Sgeo|web> (Specifically, I'm doing convoluted stuff with a State monad when I feel I should probably be using a State and Writer monad stack)
21:45:57 <oerjan> i'm wondering if using RWS might be more efficient that combining two of the parts
21:46:02 <Sgeo|web> I probably will end up using Reader, I think
21:46:39 <Sgeo|web> oerjan: I don't quite understand monad transformers yet as well as I understand how to use a single monad
21:46:54 -!- sllide has quit (Ping timeout: 245 seconds).
21:46:55 <elliott> Sgeo|web: so now is your chance to learn, since you have a use-case.
21:47:08 <CakeProphet> it's the same thing, but one is transformy.
21:47:35 <Sgeo|web> I mean, I understand, say, the conceptual meaning of IO (Maybe a)
21:47:52 <Sgeo|web> No idea how MaybeT IO a translates to something similar to that
21:47:58 -!- nooga has quit (Ping timeout: 256 seconds).
21:48:01 <lambdabot> Source not found. You speak an infinite deal of nothing
21:48:11 <lambdabot> Maybe you meant: ft map msg pl unmtl url
21:48:30 <oerjan> they're precisely the same thing, apart from a newtype
21:48:43 <CakeProphet> Sgeo|web: there IO is filling the type parameter that specifies what the inner monad is.
21:49:00 <Sgeo|web> I asked about that in #haskell , and mentioned StateT, and someone said something about some complication
21:50:03 <Sgeo|web> Which makes more sense, or both? State (Maybe b) a or State b (Maybe a)?
21:53:58 <Sgeo|web> Which would using StateT give me?
21:54:15 <lambdabot> err: `StateT Maybe a' is not applied to enough arguments, giving `/\A. Maybe -> a (A, Maybe)'
21:54:25 <oerjan> @unmtl StateT a Maybe b
21:55:25 <oerjan> it puts Maybe around both state and result part
21:55:36 <ais523> which makes sense, of course
21:55:51 <ais523> as you want a different state for each of the (1 or 0) computations you have
21:56:35 <Sgeo|web> Would there be wrong with figuring out what stack I want using @mtl ?
21:56:59 <lambdabot> Maybe you meant: ft let map msg pl
21:57:07 <lambdabot> Maybe you meant: ft map msg pl unmtl url
21:57:23 <CakeProphet> Sgeo|web: note that if all of your monad transformers are instances of MonadIO then IO can always be at the bottom
21:57:23 <oerjan> if it actually existed...
21:57:32 <Sgeo|web> Yes, there is: It doesn't exist.
21:58:02 <lambdabot> It could refer to either `Control.Monad.Error.liftIO', imported from Control.Monad.Error
21:58:02 <lambdabot> or `Control.Monad.Logic.liftIO', imported from Control.Monad.Logic
21:58:14 <lambdabot> forall a (m :: * -> *). (Control.Monad.Error.MonadIO m) => IO a -> m a
21:58:53 <Sgeo|web> I need a good monad transformer tutorial
21:58:58 <CakeProphet> so that mitigates life hell a bit. you can also write similar instances for other monads.
21:59:39 <Sgeo|web> Isn't writing functions for use within your monad stack, and those functions use lift, the way to mitigate lift hell?
21:59:39 <oerjan> for state, reader and writer lift hell is mitigated by everything being in automatically lifted classes
22:00:27 <oerjan> Sgeo|web: no, you write functions using the MonadState, MonadReader and MonadWriter class methods (and possibly others)
22:00:58 <oerjan> which already has instances for transformers which do the lifting work for you
22:01:18 <Sgeo|web> Wait, so CakeProphet is wrong, or that's just... what?
22:01:24 <elliott> CakeProphet is usually wrong. :-)
22:01:28 <elliott> Sgeo|web: Usually you shouldn't use monad transformers at all.
22:01:31 <elliott> They're only sometimes the answer.
22:01:34 <elliott> When they are, it's internally.
22:01:42 <oerjan> CakeProphet would be right if you implement your monads from scratch.
22:01:44 <elliott> i.e. you can implement your fancy monad with transformers, but probably that should not be exposed to users of it.
22:02:28 <oerjan> well yes, one customarily uses a newtype wrapper and generalized newtype deriving
22:03:02 <Sgeo|web> newtype wrapper instead of just a type synonym?
22:03:10 <Sgeo|web> Also, what's generalized newtype deriving?
22:03:46 <oerjan> newtype MyMonad = StateT Fnord (ContT Wibble (Reader Argle IO)) deriving (Monad, MonadState, MonadCont, MonadReader, MonadIO)
22:04:02 <elliott> oerjan: you got that wrong
22:04:20 <oerjan> well maybe add Functor and Applicative
22:04:22 <elliott> oerjan: look at token after =
22:04:48 <oerjan> newtype MyMonad = MyMonad (StateT Fnord (ContT Wibble (Reader Argle IO))) deriving (Monad, MonadState, MonadCont, MonadReader, MonadIO)
22:04:53 <Sgeo|web> I'm tempted to use ContT, but should probably stick with promises
22:06:43 <Sgeo|web> I think I saw them either under the name promises or futures
22:06:59 <Sgeo|web> I think I saw you link to something like that on Reddit, or someone else in the same thread did
22:07:21 <oerjan> unsafeInterleaveIO >:) *runs away*
22:09:03 <Sgeo|web> I knew of unsafeInterleaveIO before, it's not your fault.
22:09:05 -!- nooga has joined.
22:09:28 <oerjan> good. elliott might get angry.
22:10:03 <Sgeo|web> Ooh, I thought of a fun program I could write that relies on unsafeInterleaveIO
22:10:46 <Sgeo|web> Well, of course not "relies" as such, I could probably write it without
22:10:59 <Sgeo|web> Or, hmm, I can't figure out if I can or not
22:11:19 <Sgeo|web> What happens with a sequence on an infinite list of [IO a]?
22:11:56 <Sgeo|web> Hmm, mapping unsafeInterleaveIO to those is NOT what I want
22:17:09 <oerjan> Sgeo|web: it never halts.
22:17:32 <Sgeo|web> oerjan: you mean without the unsafeInterleaveIO, or even with?
22:17:36 <oerjan> also, unsafeInterleaveIO won't fix it unless you apply it to something like each cons cell
22:18:39 <Sgeo|web> I'm... not sure why you said that, I wasn't planning on applying it to the result of sequence
22:19:26 <oerjan> good. although it doesn't work to apply it to each element, either
22:20:26 <oerjan> :t foldr ((?unsafeInterleaveIO .) . liftM2 (:)) (return [])
22:20:27 <lambdabot> forall (m :: * -> *) a. (?unsafeInterleaveIO::m [a] -> m [a], Monad m) => [m a] -> m [a]
22:21:06 <oerjan> elliott: well it's what you'd want for a lazy sequence...
22:21:25 <Sgeo|web> Wait, why doesn't applying to each element work?
22:22:01 <oerjan> Sgeo|web: because the outside IO part still iterates through each element to apply unsafeInterleaveIO to it
22:22:24 -!- Nisstyre has quit (Ping timeout: 248 seconds).
22:23:36 <oerjan> even sequence . repeat $ return () won't ever halt. i think.
22:25:57 <oerjan> if you look at it from the RealWorld -> (a, RealWorld) implementation used in ghc, it's clear that the RealWorld token gets threaded through each of the infinitely many subactions, and you can never get a final one
22:27:13 <lambdabot> forall s a. State s a -> s -> (a, s)
22:28:05 <oerjan> > flip runState 0 . sequence . repeat $ do modify (+1); get
22:28:07 <lambdabot> ([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,2...
22:28:29 <oerjan> > first (take 10) . flip runState 0 . sequence . repeat $ do modify (+1); get
22:29:07 -!- SgeoN1 has joined.
22:29:12 <oerjan> anyway the point with that one is that you can get results, but you can never get a final state
22:29:28 <SgeoN1> Why is ^C being ineffective in GHCi
22:30:04 <oerjan> SgeoN1: if you have a non-allocating infinite loop, i think it never gets to check ^C
22:30:27 <SgeoN1> OK, so how do I kill GHCi
22:30:59 <SgeoN1> Oh, something just happened.
22:31:16 <SgeoN1> It must have finally noticed the Ctrl C
22:31:32 <oerjan> SgeoN1: it is possible that it _eventually_ gets caught nowadays by some preemptive check that is rarely done
22:31:52 <oerjan> i'm not sure, just a vague memory of something like that
22:34:56 <elliott> SgeoN1: if you have a non-allocating infinite loop Ctrl+C might not work
22:35:00 <Sgeo|web> CakeProphet: oerjan said you would be right if you were writing stuff from scratch
22:35:05 <elliott> async exceptions only happen on allocation
22:35:16 <elliott> this is why killThread can fail, if you have such a tight loop
22:35:23 <elliott> (note that allocation happens constantly in almost all code)
22:35:31 <CakeProphet> Sgeo|web: okay, so then I was wrong if I was saying something else than what I said.
22:36:00 * elliott thinks CakeProphet was wrong even then
22:36:04 <elliott> because if you build it from scratch
22:36:07 <elliott> there's no monad instances to lift to
22:37:01 <Sgeo|web> hpaste is taking forever to load
22:37:39 <CakeProphet> I basically said "if you use IO then liftIO is a good idea"
22:38:01 <Sgeo|web> Oh, I thought we were talking about something else
22:38:24 <oerjan> <Sgeo|web> Isn't writing functions for use within your monad stack, and those functions use lift, the way to mitigate lift hell?
22:39:09 <CakeProphet> aka "not exposing the transformer to the user"
22:39:12 <oerjan> CakeProphet: somehow i read that as being said by you
22:39:16 <elliott> oerjan: sorry if you get spammed
22:39:31 * oerjan prepares the quiet hammer
22:39:32 <Gregor> "We cut up thousands of fish and pressed their remains into squares and we will sell you that here at Burger King." -- Dinosaur Comics
22:40:06 <elliott> Call for Judgment: pass me quick
22:40:06 <elliott> Send spam emails to all email addresses listed on http://www.nomictools.com/agora/registrar/text.
22:40:06 <elliott> POSTED BY SOVIET BRENDON AT 20 OCT 2011 22:29:39 UTC Comments (5)
22:40:09 <elliott> ]] -- http://blognomic.com/blognomic/archive/pass_me_quick/
22:40:20 <elliott> that list includes the email address of every player ever :)
22:40:25 <CakeProphet> elliott: what are some alternatives to using transformers?
22:40:47 <fizzie> "Not using them, or sometimes using them."
22:40:50 <elliott> CakeProphet: there aren't alternatives, you just... don't use transformers
22:40:51 <oerjan> elliott: oh well, i already received some mail to the backup list recently.
22:42:28 <CakeProphet> elliott: you mean to split the logic for each monad that you want to use into separate functions/data-structures?
22:42:31 <oerjan> <Sgeo|web> http://hpaste.org/52892 <-- afaict that won't work for the reasons i described
22:43:09 <Sgeo|web> But is that allocating or not?
22:43:30 <oerjan> i'd think that would allocate...
22:43:54 <elliott> anything that does anything allocates
22:44:03 <elliott> you'd have to try really hard to get a non-nop loop that didn't allocate
22:44:09 <elliott> it might even be impossible
22:44:59 <oerjan> elliott: maybe that sequence only allocates on the stack, or something?
22:45:08 <elliott> oerjan: um GHC has no stack/heap distinction
22:45:19 <elliott> every allocation is a heap allocation
22:45:23 <elliott> (which is much cheaper than malloc)
22:46:25 <elliott> oerjan: i'm not sure what to tell you other than that ghc does _not_ have a stack/heap allocation distinction
22:46:37 <elliott> so it's irrelevant whether ghc refers to some memory as stack or not
22:46:41 <olsner> but it used to, right?
22:46:45 <elliott> because it's about whether the allocation code path is crossed
22:46:51 <oerjan> elliott: what about unboxed values?
22:47:18 <oerjan> ok i see what you mean
22:47:37 <oerjan> it won't matter for the question of whether it gets interrupts
22:51:41 <Sgeo|web> ....my program could easily not work for a different reason... well, wait no
22:54:13 <CakeProphet> you need GADTs with a type family of phantom types
22:55:15 <CakeProphet> also instead of Monads you should use arrows
22:56:28 <CakeProphet> (is that even possible? I'm not very familiar with arrows)
22:57:41 -!- ais523 has quit (Remote host closed the connection).
22:58:36 <CakeProphet> Sgeo|web: also once you finish the program replace every function call with thread spawning and TVars
22:59:47 <Sgeo|web> Does a State of a TVar make sense to do?
22:59:48 -!- Patashu has joined.
23:00:07 <elliott> Sgeo|web: no, Reader does though
23:00:12 <elliott> Sgeo|web: but you likely just don't want transformers at all
23:00:16 <elliott> just pass around the relevant TVars
23:00:36 <CakeProphet> oh, and don't forget every serious Haskell program uses ImplicitParameters.
23:00:47 <Sgeo|web> Oh, the TVar itself is a constant, and mutating the TVar is done in STM
23:00:49 <elliott> fizzie: I wonder if I should just use a hash function for my interning.
23:01:06 <elliott> Sgeo|web: Yes. But like I said, start without using transformers. Pretend transformers don't exist because you probably don't want them.
23:01:07 <Sgeo|web> BUt what exactly is it reading? Just a bunch of newly initialized TVarts?
23:01:37 <elliott> Sgeo|web: OK, that's not what Reader means.
23:01:43 <elliott> But seriously, just pass around TVars.
23:01:48 <Sgeo|web> I want to make a way to make getting a list of nearby avatars in AW easy even though there's no function for that, just callbacks for when avatars appear and disappear
23:02:04 <elliott> Jesus christ everything is AW with you.
23:02:11 <elliott> OK, let me say this one more time so it's clear:
23:02:18 <elliott> You probably do not want transformers.
23:02:55 <Sgeo|web> I'm pretty sure I could use something pre-existing rather than ContT for dealing with flattening out the asynchronous stuff
23:03:07 <shachaf> ReaderT WriterT StateT ContT LogicT IdentityT MaybeT IdentityT Identity
23:03:18 <elliott> Sgeo|web: You just want to write blocking calls.
23:03:21 <elliott> Sgeo|web: GHC has an event manager.
23:03:39 <Sgeo|web> event manager library, you mean, or what?
23:03:53 <elliott> All "blocking" IO is actually done with asynchronous calls.
23:04:05 <Sgeo|web> And it will let me turn non-blocking calls to blocking calls? COOL
23:04:06 <elliott> It's like node.js, except you don't have to fucking write CPS like a moron.
23:04:06 <CakeProphet> in STM you don't really need to worry about blocking very much do you?
23:04:21 <shachaf> elliott: You have write CPS for all IO in Haskell.
23:04:25 <elliott> I suppose (>>=) is pretty CPSy.
23:04:27 <elliott> But we have sugar for that. :p
23:04:36 <shachaf> It gets a thing and a continuation.
23:04:44 <shachaf> That's why Cont is the best monad.
23:04:46 <oerjan> <CakeProphet> (is that even possible? I'm not very familiar with arrows) <-- yes, the arrow package has them
23:05:08 <elliott> The best monad is data Nomad a = Return a | forall b. Bind (Nomad b) (b -> Nomad a).
23:05:57 <CakeProphet> elliott: also that can break the laws easily.
23:07:14 -!- augur has quit (Remote host closed the connection).
23:07:14 <CakeProphet> I think we can pretty agree that barrier monads are the best.
23:07:25 <oerjan> shachaf: wait IdentityT exists?
23:07:35 <elliott> oerjan: Identity = IdentityT Identity.
23:07:47 * lambdabot puts on her slapping gloves, and slaps elliott
23:07:49 <elliott> (I wonder if you can make that work.)
23:09:41 <Sgeo|web> Wait, those are an everyday occurance... I think
23:09:43 <elliott> fizzie: Wow, I even have degrade/intern.
23:09:49 <elliott> fizzie: Like, fully written.
23:09:58 <elliott> What's the maximum length of an argument list this decade?
23:10:16 <lambdabot> http://blog.sigfpe.com/2008/12/mother-of-all-monads.html
23:10:16 <lambdabot> Title: A Neighborhood of Infinity: The Mother of
23:10:24 <elliott> shachaf: Yes, I've read it.
23:10:37 <CakeProphet> Sgeo|web: infinite types are not allowed, but recursive data (i.e. lists) are common
23:10:55 <Sgeo|web> Wait, there's a maximum length?
23:11:09 <Sgeo|web> printf can take an indefinite number of arguments, I think
23:11:48 <Sgeo|web> (Surely there should be a typesafe printf? Maybe something with TH?)
23:12:40 -!- nooga has quit (Ping timeout: 255 seconds).
23:12:47 <CakeProphet> type-safe variadic functions are possible in haskell. I know because I read about it on wikipedia
23:12:47 <Sgeo|web> What happens if you pass it too many arguments?
23:12:55 <elliott> Sgeo|web: Runtime failure.
23:13:07 <Sgeo|web> ...how are runtime failures type-safe?
23:13:23 <elliott> main = error "foo" -- haskell isn't type-safe
23:13:28 <monqy> how type safe is type safe
23:13:41 <shachaf> > main = unsafeCoerce "foo" -- haskell isn't type-safe
23:13:42 <lambdabot> <no location info>: parse error on input `='
23:14:11 <Sgeo|web> Could you make something that will accept oh/
23:14:16 <monqy> type safe and type safe meant different things there
23:14:21 <shachaf> elliott: Now you'll say that unsafeCoerce isn't even Haskell?
23:14:33 <elliott> Sgeo|web: someAWCall a b = do { result <- newEmptyMVar; asyncAWCall a b (putMVar result); takeMVar result } -- this is blocking + efficient (last argument to asyncAWCall is callback)
23:14:33 <shachaf> I think you can implement it in Haskell 2010.
23:14:34 <Sgeo|web> that will accept only the correct number of arguments, using TH?
23:15:03 <shachaf> All efficient programs are written in C.
23:15:11 <elliott> Sgeo|web: wrapAsync f = do { result <- newEmptyMVar; f (putMVar result); takeMVar result }
23:15:13 <elliott> Sgeo|web: Then the above can just be
23:15:23 <elliott> Sgeo|web: someAWCall a b = wrapAsync (asyncAWCall a b)
23:15:24 <CakeProphet> shachaf: assembly programs obviously don't exist anymore.
23:15:41 <elliott> shachaf: It should be the most efficient way to do it blockingly.
23:15:47 <elliott> shachaf: I mean, takeMVar isn't exactly expensive.
23:15:48 <shachaf> elliott: Well, in Haskell.
23:15:59 <elliott> Sgeo|web: Define isn't threadsafe.
23:15:59 <Sgeo|web> Not sure how that affects things
23:16:07 <elliott> Sgeo|web: You can make sure all AW FFI calls happen on one thread.
23:16:11 <elliott> With bound threads + a queue.
23:16:21 <shachaf> That might not be sufficient.
23:16:25 * shachaf doesn't even know what AW is.
23:16:29 <elliott> Sgeo|web: (And still maintain the same interface.)
23:16:34 <shachaf> Some Minecraft thing, probably.
23:16:52 <elliott> shachaf: I apologise for the fact that Sgeo|web is about to tell you what it is
23:17:04 <Sgeo|web> Let's see. A lot of functions get their arguments from a changing global parameters thingy that you set with, say, aw_init(AW_SOME_ATTRIB, 346); before the call
23:17:18 <elliott> Sgeo|web: Right. That's fine.
23:17:36 <elliott> Sgeo|web: You have one Haskell thread, bound to an OS thread, that continually reads AW requests from a queue, mutates the global state, and makes the call.
23:19:33 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
23:19:46 <CakeProphet> the real person that Sybil is based on never had disassociative identity disorder
23:23:52 <oerjan> well, those who remember who sybil is, anyhow
23:24:23 <elliott> CakeProphet: Wikipedia seems rather less sure than you are.
23:25:25 <oerjan> oh wait, i thought we were dissing CakeProphet's ex-girlfriends. never mind.
23:26:30 <elliott> oerjan: You get to help me define my file format!
23:26:43 <CakeProphet> elliott: okay. it will use sequences of byte values.
23:29:38 <elliott> CakeProphet: Reverse-context tree.
23:30:03 <elliott> CakeProphet: Of about a terabyte.
23:30:10 <CakeProphet> er wait there's probably some duplication right?
23:30:16 <oerjan> <FileHeader style="elliott project"><manifest tone="megalomaniackal"><goal><conquest target="world"/></goal><prognosis><probability unit="snowball site="hell"/></prognosis></manifest></FileHeader>
23:31:14 <CakeProphet> elliott: make a table of trees and assign a ID to each. the top of the file lists the unique tables, enumerated with IDs from 0 to n
23:31:29 <CakeProphet> then the second part of the file references these ids or something?
23:31:32 <elliott> CakeProphet: I also have to be able to merge an arbitrary number of such files with constant space usage.
23:31:54 * elliott thinks he'll opt to bother fizzie about it instead of CakeProphet.
23:32:36 <CakeProphet> my file format is basically how Python's pickle format works. :P
23:34:11 -!- Nisstyre has joined.
23:34:44 <CakeProphet> elliott: maybe if I knew more about what a reverse context tree is.
23:35:59 <CakeProphet> I've read from very reliable sources that Huffman Coding is a good way to reduce the size of a file.
23:38:58 <CakeProphet> the world's first spinal transplant was done in 2007
23:39:32 -!- ive has joined.
23:40:29 <oerjan> this is spinal transplant
23:41:48 <CakeProphet> so yesterday in History class we watched scenes from 300
23:41:57 <CakeProphet> specifically the battle scenes because they somewhat accurate
23:42:55 <CakeProphet> elliott: does a reverse context tree maybe reduce to a n-order markov model?
23:43:13 <CakeProphet> so that you can construct the tree from a much smaller amount of data.
23:46:56 <CakeProphet> I'm sure it wouldn't be difficult to explain what the hell a reverse context tree is.
23:47:15 <elliott> Yeah, but I already know what the basic structure has to look like.
23:49:10 <elliott> I suppose I should figure out this shit myself.
23:50:24 <CakeProphet> you will figure everything out about the shit.
23:50:29 <CakeProphet> shit will not even be a confusing thing to you.
23:51:08 <CakeProphet> your tree, you want it to be of a reverse context, yes?
23:51:17 -!- copumpkin has joined.
23:51:18 <CakeProphet> just find the minimum possible amount of information you need to create one.