<font class="Apple-style-span" face="&#39;trebuchet ms&#39;, sans-serif">Hello,</font><div><font class="Apple-style-span" face="&#39;trebuchet ms&#39;, sans-serif">  I&#39;m wondering if it is possible doing IO in terms of Arrow.</font></div>

<div><font class="Apple-style-span" face="&#39;trebuchet ms&#39;, sans-serif">  I got a function search all files under directory recursively and I&#39;d like to refartoring using Arrow terms.</font></div><div><font class="Apple-style-span" face="&#39;trebuchet ms&#39;, sans-serif"> </font></div>

<div><font class="Apple-style-span" face="&#39;trebuchet ms&#39;, sans-serif">  I tried to define a function like below but failed.</font></div><div><font class="Apple-style-span" face="&#39;trebuchet ms&#39;, sans-serif">  </font><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">isDirExist = Kleisli doesDirectoryExist</font></div>

<div><font class="Apple-style-span" face="&#39;trebuchet ms&#39;, sans-serif"> </font></div><div><font class="Apple-style-span" face="&#39;trebuchet ms&#39;, sans-serif">  Do I need to define a instance for IO to be Arrow? Or is there any existing solutions?</font></div>

<font class="Apple-style-span" face="&#39;trebuchet ms&#39;, sans-serif">  I&#39;m a newbie of Haskell and thanks your help.</font><div>  </div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  ~~~~~</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  getFilesInDir :: FilePath -&gt; IO [FilePath]</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  getFilesInDir inp = do </font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      isDir &lt;- doesDirectoryExist inp</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      files &lt;- if isDir then</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">                   (do</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">                      names &lt;- getDirectoryContents inp</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">                      forM [ inp &lt;/&gt; x | x &lt;- names, isNotSpecialDir x ] getFilesInDir)</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">                   else return [[inp]] </font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">      return $ concat files</font></div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace">  ~~~~~</font></div><div><br>

</div>