<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: chenge</title>
    <description>The latest articles on DEV Community by chenge (@chenge).</description>
    <link>https://dev.to/chenge</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F32824%2Fab03c93c-1b71-4ca3-a77f-6d3e988c0da9.jpeg</url>
      <title>DEV Community: chenge</title>
      <link>https://dev.to/chenge</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chenge"/>
    <language>en</language>
    <item>
      <title>A simple concise guide for Go in Chinese</title>
      <dc:creator>chenge</dc:creator>
      <pubDate>Tue, 14 May 2019 03:48:04 +0000</pubDate>
      <link>https://dev.to/chenge/a-simple-concise-guide-for-go-in-chinese-46jg</link>
      <guid>https://dev.to/chenge/a-simple-concise-guide-for-go-in-chinese-46jg</guid>
      <description>&lt;p&gt;Go is a simple language so we like simple guide. Here is one written in Chinese. You can read in one or two days. If you don't know Chinese you can ask help from Google translate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jiajunhuang.com/tutorial/golang/hello_world.md"&gt;hello world&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>simple</category>
      <category>concise</category>
      <category>guide</category>
    </item>
    <item>
      <title>Study of Programming Languages Not to Learn in 2019</title>
      <dc:creator>chenge</dc:creator>
      <pubDate>Thu, 18 Apr 2019 23:19:56 +0000</pubDate>
      <link>https://dev.to/chenge/study-of-programming-languages-not-to-learn-in-2019-5al</link>
      <guid>https://dev.to/chenge/study-of-programming-languages-not-to-learn-in-2019-5al</guid>
      <description>&lt;p&gt;Ruby rank #18，Elixir #7， Erlang #3&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_ysq-c4v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://process.filestackapi.com/cache%3Dexpiry:max/NUTYOay0RiC1KTztmkNn" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_ysq-c4v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://process.filestackapi.com/cache%3Dexpiry:max/NUTYOay0RiC1KTztmkNn" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What does tech stacks mean in following pic?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vRXXTB6D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://process.filestackapi.com/cache%3Dexpiry:max/AScGwzg7RRi49Fojljbv" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vRXXTB6D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://process.filestackapi.com/cache%3Dexpiry:max/AScGwzg7RRi49Fojljbv" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codementor.io/blog/worst-languages-2019-6mvbfg3w9x"&gt;--&amp;gt;link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>language</category>
      <category>ruby</category>
      <category>elixir</category>
      <category>erlang</category>
    </item>
    <item>
      <title>Simple Idea for Improving Error Handling of Go</title>
      <dc:creator>chenge</dc:creator>
      <pubDate>Thu, 11 Apr 2019 08:34:41 +0000</pubDate>
      <link>https://dev.to/chenge/simple-idea-for-improving-error-handling-of-go-3l7k</link>
      <guid>https://dev.to/chenge/simple-idea-for-improving-error-handling-of-go-3l7k</guid>
      <description>&lt;p&gt;Following is normal code, repeat too much, not so good.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Improved code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;errWriter&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;w&lt;/span&gt;   &lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Writer&lt;/span&gt;
    &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ew&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;errWriter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ew&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ew&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ew&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;ew&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;errWriter&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;ew&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;ew&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;ew&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ew&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ew&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;It looks better now by adding another level.&lt;/p&gt;

&lt;p&gt;Do you think so?&lt;/p&gt;

&lt;h1&gt;
  
  
  End and Ref
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://huoding.com/2019/04/11/728"&gt;Repeat Error Handling in Go&lt;/a&gt;, a Chinese post.&lt;/p&gt;

</description>
      <category>go</category>
      <category>errors</category>
    </item>
    <item>
      <title>Nice Video: First Day of Emacs</title>
      <dc:creator>chenge</dc:creator>
      <pubDate>Sun, 27 Jan 2019 22:23:01 +0000</pubDate>
      <link>https://dev.to/chenge/nice-video-first-day-of-emacs-3lg3</link>
      <guid>https://dev.to/chenge/nice-video-first-day-of-emacs-3lg3</guid>
      <description>&lt;p&gt;First words, the teacher is great. But he used Chinese, if you don't konw Chinese and you are patient you can watch and guess his idea. The slides are English.&lt;/p&gt;

&lt;p&gt;I knew a little Emacs. After this video I feel more confidence. The teacher taught from basics. &lt;/p&gt;

&lt;p&gt;The Org mode and company package are useful. Org mode can fold topics easily.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S2GgeyOO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/37lll4xp5q08i7hiff3p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S2GgeyOO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/37lll4xp5q08i7hiff3p.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why Emacs
&lt;/h1&gt;

&lt;p&gt;I use MS code and a little vim now. I still want to try emacs because I think it's fun and can practice some lisp.&lt;/p&gt;

&lt;p&gt;If you prefer menu you can try spacemacs which is more friendly for new learners. It simply uses space key to give you a menu.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/0hpVuoyO8_o"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>emacs</category>
    </item>
    <item>
      <title>Haskell in One Slide</title>
      <dc:creator>chenge</dc:creator>
      <pubDate>Sat, 26 Jan 2019 10:46:57 +0000</pubDate>
      <link>https://dev.to/chenge/haskell-in-one-slide-2nba</link>
      <guid>https://dev.to/chenge/haskell-in-one-slide-2nba</guid>
      <description>&lt;p&gt;This pic is from the video by professor Simon and explains the function syntax clearly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fzlt6987ritz13evnqod3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fzlt6987ritz13evnqod3.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/6COvD8oynmI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>haskell</category>
      <category>short</category>
      <category>slide</category>
      <category>pic</category>
    </item>
    <item>
      <title>Typeclass(Interface) is Kernel Concept of Haskell Functor, Monad These Weird</title>
      <dc:creator>chenge</dc:creator>
      <pubDate>Sat, 26 Jan 2019 09:35:53 +0000</pubDate>
      <link>https://dev.to/chenge/typeclassinterface-is-kernel-concept-of-haskell-functor-monad-these-weird-1cji</link>
      <guid>https://dev.to/chenge/typeclassinterface-is-kernel-concept-of-haskell-functor-monad-these-weird-1cji</guid>
      <description>&lt;p&gt;In short, typeclass is just like interface, so it's not so hard to understand.&lt;/p&gt;

&lt;p&gt;Let's see some code about Maybe functor, functor has a special map function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight haskell"&gt;&lt;code&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="kt"&gt;Functor&lt;/span&gt; &lt;span class="kt"&gt;Maybe&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;
    &lt;span class="n"&gt;fmap&lt;/span&gt; &lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Maybe&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Maybe&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;

&lt;span class="kr"&gt;instance&lt;/span&gt; &lt;span class="kt"&gt;Functor&lt;/span&gt; &lt;span class="kt"&gt;Maybe&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;
    &lt;span class="n"&gt;fmap&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Just&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Just&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;fmap&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="kt"&gt;Nothing&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Nothing&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Functor is a typeclass.&lt;br&gt;
Applicative Functor extends Functor.&lt;br&gt;
Monad extends Applicative.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight haskell"&gt;&lt;code&gt;&lt;span class="kr"&gt;class&lt;/span&gt; &lt;span class="kt"&gt;Applicative&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Monad&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="kr"&gt;where&lt;/span&gt;
    &lt;span class="n"&gt;return&lt;/span&gt; &lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;=&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And another one Monoid is a math concept. It's a typeclass too.&lt;/p&gt;

&lt;p&gt;They are all typeclasses.&lt;/p&gt;
&lt;h1&gt;
  
  
  ref
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fblog.leichunfeng.com%2Fimages%2Frecap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fblog.leichunfeng.com%2Fimages%2Frecap.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="http://blog.leichunfeng.com/blog/2015/11/08/functor-applicative-and-monad/" rel="noopener noreferrer"&gt;Functor、Applicative 和 Monad(Chinese)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://learnyouahaskell.com/" rel="noopener noreferrer"&gt;Learn You a Haskell for Great Good!&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/nestedsoftware" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F59384%2Faeea81a5-33f5-4ed8-89d9-6ec48ad4bd8e.png" alt="nestedsoftware"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/nestedsoftware/book-notes-learn-you-a-haskell-for-great-good-2cnp" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Book Notes: Learn You a Haskell for Great Good!&lt;/h2&gt;
      &lt;h3&gt;Nested Software ・ Dec 4 '18&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#haskell&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#functional&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#monad&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



</description>
      <category>haskell</category>
      <category>typeclass</category>
    </item>
    <item>
      <title>A Good Video for Haskell Monad</title>
      <dc:creator>chenge</dc:creator>
      <pubDate>Fri, 25 Jan 2019 13:06:53 +0000</pubDate>
      <link>https://dev.to/chenge/a-good-video-for-haskell-monad-5no</link>
      <guid>https://dev.to/chenge/a-good-video-for-haskell-monad-5no</guid>
      <description>&lt;p&gt;A good video although I don't understand monad now.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/rvRD_LRaiRs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>haskell</category>
      <category>monad</category>
    </item>
    <item>
      <title>A Fun Tool: Curl to Program</title>
      <dc:creator>chenge</dc:creator>
      <pubDate>Fri, 25 Jan 2019 12:28:16 +0000</pubDate>
      <link>https://dev.to/chenge/a-fun-tool-curl-to-program-23km</link>
      <guid>https://dev.to/chenge/a-fun-tool-curl-to-program-23km</guid>
      <description>&lt;p&gt;Convert curl syntax to Python, Node.js, R, PHP, Go&lt;/p&gt;

&lt;p&gt;It support python and other languages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://curl.trillworks.com/"&gt;https://curl.trillworks.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>curl</category>
      <category>tool</category>
      <category>fun</category>
    </item>
    <item>
      <title>A Nice Short Video for Basic Haskell</title>
      <dc:creator>chenge</dc:creator>
      <pubDate>Fri, 25 Jan 2019 10:20:13 +0000</pubDate>
      <link>https://dev.to/chenge/a-nice-short-video-for-basic-haskell-54c2</link>
      <guid>https://dev.to/chenge/a-nice-short-video-for-basic-haskell-54c2</guid>
      <description>&lt;p&gt;Haskell Basics - FunFunFunction&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/j5a9l1Td2Lo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>haskell</category>
      <category>functional</category>
      <category>video</category>
    </item>
    <item>
      <title>What's the "//?" in the Code Editor</title>
      <dc:creator>chenge</dc:creator>
      <pubDate>Wed, 23 Jan 2019 09:50:18 +0000</pubDate>
      <link>https://dev.to/chenge/whats-the--in-the-code-editor-50do</link>
      <guid>https://dev.to/chenge/whats-the--in-the-code-editor-50do</guid>
      <description>&lt;p&gt;"//?" can eval instantly. I saw it in this short JS teaching video. It seems cool. What plugin is it?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EVYZdEVV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/z0ano6f01yg3q1fxjlid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EVYZdEVV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/z0ano6f01yg3q1fxjlid.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/2s0NJA1nNP0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>code</category>
      <category>vcode</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Meta-programming for Dummies - RedDotRubyConf 2017</title>
      <dc:creator>chenge</dc:creator>
      <pubDate>Tue, 22 Jan 2019 21:17:34 +0000</pubDate>
      <link>https://dev.to/chenge/meta-programming-for-dummies---reddotrubyconf-2017-4bfk</link>
      <guid>https://dev.to/chenge/meta-programming-for-dummies---reddotrubyconf-2017-4bfk</guid>
      <description>

&lt;p&gt;A nice video for meta-programming.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/XggXhLalnkk"&gt; &lt;/iframe&gt;&lt;/p&gt;


</description>
      <category>ruby</category>
      <category>metaprogramming</category>
    </item>
    <item>
      <title>Cool CLIs in Elixir with IO.write/2</title>
      <dc:creator>chenge</dc:creator>
      <pubDate>Mon, 21 Jan 2019 07:00:23 +0000</pubDate>
      <link>https://dev.to/chenge/cool-clis-in-elixir-with-iowrite2-18f6</link>
      <guid>https://dev.to/chenge/cool-clis-in-elixir-with-iowrite2-18f6</guid>
      <description>&lt;p&gt;Today I read &lt;a href="https://dennisbeatty.com/2019/01/09/cool-clis-in-elixir-with-io-write-2.html" rel="noopener noreferrer"&gt;this&lt;/a&gt;, it told us with 3 simple and fun samples: clock, counter and progress bar. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdennisbeatty.com%2Fcontent%2F2019-01-09-cool-clis-in-elixir-with-io-write-2%2Fprogress.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdennisbeatty.com%2Fcontent%2F2019-01-09-cool-clis-in-elixir-with-io-write-2%2Fprogress.gif"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="k"&gt;defmodule&lt;/span&gt; &lt;span class="no"&gt;Progress&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="nv"&gt;@rounding_precision&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
  &lt;span class="nv"&gt;@progress_bar_size&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
  &lt;span class="nv"&gt;@complete_character&lt;/span&gt; &lt;span class="s2"&gt;"█"&lt;/span&gt;
  &lt;span class="nv"&gt;@incomplete_character&lt;/span&gt; &lt;span class="s2"&gt;"░"&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="n"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;percent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;percent_complete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;divisor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nv"&gt;@progress_bar_size&lt;/span&gt;

    &lt;span class="n"&gt;complete_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;percent&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;divisor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;incomplete_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;@progress_bar_size&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;complete_count&lt;/span&gt;

    &lt;span class="n"&gt;complete&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;duplicate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;@complete_character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;complete_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;incomplete&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;String&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;duplicate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;@incomplete_character&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;incomplete_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;complete&lt;/span&gt;&lt;span class="si"&gt;}#{&lt;/span&gt;&lt;span class="n"&gt;incomplete&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;  (&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;percent&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;%)"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;defp&lt;/span&gt; &lt;span class="n"&gt;percent_complete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="no"&gt;Float&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;100.0&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;@rounding_precision&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;

&lt;span class="no"&gt;Enum&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class="no"&gt;IO&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Progress&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="no"&gt;Process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="no"&gt;IO&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>elixir</category>
      <category>cli</category>
    </item>
  </channel>
</rss>
