<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>log for haskell-sucks</title>
  <updated>2011-08-03T23:43:37+00:00</updated>
  <link href="http://www.bitcheese.net/wiki/log/haskell-sucks"/>
  <entry>
    <title>Merge branch 'master' of bitcheese.net:/var/gits/bwiki</title>
    <updated>2011-08-03T23:43:37+00:00</updated>
    <link href="http://www.bitcheese.net/wiki/diff/47789ca0b36b4a44114f34a75e7ad93c030cbb65"/>
    <author>
      <name>Voker57</name>
    </author>
    <content type="html">&lt;p&gt;&lt;strong&gt;Merge branch 'master' of bitcheese.net:/var/gits/bwiki&lt;br /&gt;&lt;br /&gt;Conflicts:&lt;br /&gt;	haskell-sucks&lt;/strong&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>instances</title>
    <updated>2011-08-03T23:43:11+00:00</updated>
    <link href="http://www.bitcheese.net/wiki/diff/ae0223f1d1a23f90d439514daa1939b6177ebe79"/>
    <author>
      <name>Voker57</name>
    </author>
    <content type="html">&lt;p&gt;&lt;strong&gt;instances&lt;/strong&gt;&lt;/p&gt;&lt;span style='color: #FF9EA0;	background: #000D00;	text-decoration: line-through;'&gt;-- a/haskell-sucks&lt;/span&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;++ b/haskell-sucks&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #E200FF'&gt;@@ -60,4 +60,10 @@&lt;/span&gt;&lt;br /&gt;Let us use Infinity like any other number? No. We can only get it, and NaN, as results of arithmetic operations, and check for them. Moreover, division by zero raises an error.&lt;br /&gt;&lt;br /&gt;Other brilliand thing in Haskell: Maybe. But standard library seems to avoid it whenever necessary. Pass shit to *read*, *!!*, *tail*, *init*, etc. and get an error.&lt;br /&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;h2. Instances&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;There is no way to explicitly export instances. If you define an instance, it automatically gets exported whenever you want it or not. You can't explicitly import an instance either.&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;There are lot of problems with defining instances of complex types. For instance, if you define @instance [a]@, you can't define separate instance of @[SomeType]@&lt;/span&gt;</content>
  </entry>
  <entry>
    <title>*brilliant</title>
    <updated>2011-07-25T10:03:33+00:00</updated>
    <link href="http://www.bitcheese.net/wiki/diff/4d83a87a5e288bd7e15e22066449dfe792a90ead"/>
    <author>
      <name>Alexander Markov</name>
    </author>
    <content type="html">&lt;p&gt;&lt;strong&gt;*brilliant&lt;/strong&gt;&lt;/p&gt;&lt;span style='color: #FF9EA0;	background: #000D00;	text-decoration: line-through;'&gt;-- a/haskell-sucks&lt;/span&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;++ b/haskell-sucks&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #E200FF'&gt;@@ -59,5 +59,5 @@&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let us use Infinity like any other number? No. We can only get it, and NaN, as results of arithmetic operations, and check for them. Moreover, division by zero raises an error.&lt;br /&gt;&lt;br /&gt;Other &lt;span style='color: #FF9EA0;	background: #000D00;	text-decoration: line-through;'&gt;brilliand&lt;/span&gt; &lt;span style='color: #8AFF63; background: #000D00;'&gt;brilliant&lt;/span&gt; thing in Haskell: Maybe. But standard library seems to avoid it whenever necessary. Pass shit to *read*, *!!*, *tail*, *init*, etc. and get an error.</content>
  </entry>
  <entry>
    <title>another nicey</title>
    <updated>2010-06-07T07:49:39+00:00</updated>
    <link href="http://www.bitcheese.net/wiki/diff/e73bf9d11fb9a1f5f7ea7d4d8ab4971955af7385"/>
    <author>
      <name>Voker57</name>
    </author>
    <content type="html">&lt;p&gt;&lt;strong&gt;another nicey&lt;/strong&gt;&lt;/p&gt;&lt;span style='color: #FF9EA0;	background: #000D00;	text-decoration: line-through;'&gt;-- a/code/hjpath&lt;/span&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;++ b/code/hjpath&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #E200FF'&gt;@@ -21,6 +21,8 @@&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;bc. jPath [ArrayLookup 2] &amp;quot;[1,2,3]&amp;quot; -- [&amp;quot;3&amp;quot;]&lt;br /&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;For more info, refer to docs on hackage.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;h2. Get it&lt;br /&gt;&lt;br /&gt; * With &amp;quot;cabal-install&amp;quot;:http://www.haskell.org/cabal/download.html: cabal install hjpath&lt;br /&gt;&lt;br /&gt;&lt;span style='color: #FF9EA0;	background: #000D00;	text-decoration: line-through;'&gt;-- a/haskell-sucks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;++ b/haskell-sucks&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #E200FF'&gt;@@ -45,6 +45,12 @@&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Where &amp;quot;-&amp;gt;redMask=&amp;quot; is another postfix operator.&lt;br /&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;Also, you can get very nice runtime error if you write code like this&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;bc. data Type = Cons1 { prop1 :: Int }&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;	| Cons2 {prop2 :: Int }&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;main = print $ prop2 $ Cons1 {prop1 = 0}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;h2. base library sucks&lt;br /&gt;&lt;br /&gt;Haskell has brilliant thing: infinite integral types.</content>
  </entry>
  <entry>
    <title>Haskell sucks</title>
    <updated>2010-01-26T18:41:12+00:00</updated>
    <link href="http://www.bitcheese.net/wiki/diff/f0dc2221bccafc408858023da1cb656006dea6cb"/>
    <author>
      <name>Voker57</name>
    </author>
    <content type="html">&lt;p&gt;&lt;strong&gt;Haskell sucks&lt;/strong&gt;&lt;/p&gt;&lt;span style='color: #FF9EA0;	background: #000D00;	text-decoration: line-through;'&gt;-- /dev/null&lt;/span&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;++ b/haskell-sucks&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #E200FF'&gt;@@ -1 +1,57 @@&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;h1. Where Haskell Sucks&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;h2. Records&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;Records' syntax sucks ass. Let's look at this code example:&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;bc. data VisualType = VisualType {&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;	visualId :: Word32,&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;	visualClass :: VisualClass,&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;	bitsPerRgbValue :: Word8,&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;	colormapEntries :: Word16,&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;	redMask :: Word32,&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;	greenMask :: Word32,&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;	blueMask :: Word32&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;	}&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;Here we:&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;# Pollute function namespace with names of every record field&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;# Have to go through quite some hoops to change record's value&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;Changing value of a field:&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;bc. vtype {redMask = 666}&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;It's not a function. It's pure syntax shit. Cons are:&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;You can't curry this. To change field of every enrty in list, you'll have to make lambdas:&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;bc. map (\vt -&amp;gt; vt {redMask = 666}) vtypes&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;To prevent namespace pollution, you can stick every data structure in module of its own and disambiguate like this:&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;bc. VisualType.redMask vt&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;But that still sucks.&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;Possible solution of this would be adding something like C data structures, so you can do&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;bc. vt -&amp;gt;redMask&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;Where &amp;quot;-&amp;gt;redMask&amp;quot; is a postfix function, and it can be curried, passed aroud, or whetever. for changin fields, something like in ruby can be used:&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;bc. vt -&amp;gt;redMask= 666&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;Where &amp;quot;-&amp;gt;redMask=&amp;quot; is another postfix operator.&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;h2. base library sucks&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;Haskell has brilliant thing: infinite integral types.&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;Let us use them for indexes? Well, we can: there are genericLength and friends. If you use !! (:: [a] -&amp;gt; Int -&amp;gt; a) though, which is simplier, you are fucked if you suddenly need larger indexes. Indexes are barely a problem though.&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;Let us use Infinity like any other number? No. We can only get it, and NaN, as results of arithmetic operations, and check for them. Moreover, division by zero raises an error.&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style='color: #8AFF63; background: #000D00;'&gt;Other brilliand thing in Haskell: Maybe. But standard library seems to avoid it whenever necessary. Pass shit to *read*, *!!*, *tail*, *init*, etc. and get an error.&lt;/span&gt;</content>
  </entry>
</feed>

