Skip to content

tyt6/H

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

-*- encoding: utf-8-unix -*-

Develop stopped.

日本語
  中止
  haskell->sexp なparser作ろうと思ったが、indent-ruleだけではsexpにならないことが判明.
  parseModuleは使いこなせないと判断。
  liskellがあれば型推論を使わない場合は簡単に実装できそうである。

  古い文章
  haskell のIO()内をCみたいにeagerに評価して(IO関数の中身を組み換えます)
  
    import GHC.IOArray
    
    io1:: Ix i => (IOArray i e) -> i -> (IOArray i e) -> i -> IO Io2out
    io1 ioarr ix ioarr2 ix2= io2 (ioarr[ix]) (ioarr[ix] <- ioarr2[ix2])
  みたい(未定)に書けるようにしたい。
  (インストール中に書いてるので良い例が思いつかない。Haskellにも慣れていない。)
  
  上記の例は次のように組み換えます。(コンパイルに-XBangPatterns加えます。)
    import GHC.IOArray

    io1:: Ix i => IOArray i e -> i -> IOArray i e -> i -> IO Io2out
    !io1 arr ix arr2 ix2 = do
      ! _uniquevar1_ <- readIOArray ioarr ix
      ! _uniquevar2_ <- readIOArray ioarr2 ix2
      writeIOArray ioarr ix _uniquevar2_
      ! _uniquevar3_ <- io2 _uniquevar1_ _uniquevar2_
      return _uniquevar3_
      
トップレベルの!はこの組み換えを有効にする合図

型推論を使わない場合
    import GHC.IOArray
    
    io1:: Ix i => IOVar e1 -> IOArray i e2 -> i -> IOArray i e2 -> i -> IO iofunc1out
    io1 iovar ioarr ix ioarr2 ix2= iofunc1 (iocall iofunc2) (ioref iovar) (ioaref ioarr ix) (ioaset ioarr ix (ioaref ioarr2 ix2))

    --こちらの定義は参考まで
    iofunc1 :: iofunc2out -> e1 -> e2 -> e2 -> iofunc1out
      

About

develop stopped

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published