トップ «前の日記(2004-08-02) 最新 次の日記(2004-08-04)» 月表示 編集

日々の流転


2004-08-03 [長年日記]

λ. WASH (2)

練習に「フリーソフトウェアライセンス診断」WASHで書いてみた。ただ、現在のところソースコード中のマルチバイト文字はUnicode対応版Hugs以外では正しく解釈されないので、それ以外の処理系ではエスケープしておく必要がある(エスケープ版)。


module Main where
import Prelude hiding (head, span, div, map)
import CGI
 
main :: IO ()
main = run (f questions)
 
f :: [(String, Maybe String, Maybe String)] -> CGI ()
f [] = ask $ standardPage qtitle (p (text "Error"))
f ((question, yes, no) : xs) = standardQuery qtitle $
                               do p (text question)
                                  submit0 (g yes) (fieldVALUE "Yes")
                                  submit0 (g no)  (fieldVALUE "No")
    where g (Just licence) =
              ask $ standardPage (qtitle ++ "結果") $ p $
                  text (licence ++ "がおすすめ")
          g Nothing = f xs
 
qtitle = "フリーソフトウェアライセンス診断"
 
questions =
    [ ( "あなたのコードを商用ソフトウェアに組み込まれて販売されてもかまわないか?"
      , Nothing, Just "GPLライセンス" )
    , ( "あなたはストールマンのフリーソフトウェア運動に心から賛同しているか?"
      , Just "GPLライセンス", Nothing )
    , ( "あなたはそのソフトウェアを将来Rubyの一部として配布したいか?"
      , Just "Rubyライセンス", Just "BSDまたはMITライセンス" )
    ]

Tags: haskell

λ. Re: wxHaskell (その3)

コンソールを消すには、PEのヘッダを編集しなくても、リンカに-mwindowsを渡せばよいので、ghcの場合-optl -mwindowsを渡せば良いです。

あと、Charは「単なる0..255なデータ」ではなくUnicodeの文字です。手元のghciだと「maxBound :: Char」は「'\x10ffff'」になります。

とはいっても、ghcのIO周りやForeign.C.String辺りはUnicodeとローカルなエンコーディングの変換をしてくれない(FFI 1.0 非準拠)ので、現在のghcでwxHaskellを使う場合、結局Stringをローカルなエンコーディングのバイト列として扱わないと日本語出ませんが(泣)。

HugsのForeign.C.Stringに関しては4月12日に一度パッチを作ったのですが、Hugsで使えるライブラリでこの辺りの結果を確認できるものが思いつかなかったので、ちと放置中。

Tags: haskell