[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
904: 896 [sage] 2011/12/28(水) 07:54:57.28 AAS
>>902902(2): デフォルトの名無しさん [sage] 2011/12/28(水) 07:47:55.90 AAS
適当に推測すると、cppの出力が非UTF-8の何かを含んでるんじゃないの?
cpp -traditional Test.hs
の出力を見てみるとか
ありがとうございます
色々な ghc のバージョンで試す環境が作れたので、
丁度今試していたのですが、どうも 6.12.3 なら OK で
7.0.0 以上なら NG みたいなんです
もう仕事に向うので、帰宅したら cpp -traditional Test.hs の方を試してみます
905(2): 896 [sage] 2011/12/28(水) 19:09:32.91 AAS
>>902
cpp -traditional Test.hs の結果が以下のように出力されました
-------------------------------
# 1 "Test.hs"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "Test.hs"
{-# LANGUAGE CPP #-}
-------------------------------
何か問題あるでしょうか
906(1): デフォルトの名無しさん [sage] 2011/12/28(水) 19:25:33.17 AAS
>>905
わからん。念のためghci -v Test.hsをやってみて、
そこで出てきたプリプロセスコマンドをそのまま打ち込んでみたら出力はどうなる?
カレントディレクトリかテンポラリディレクトリのパスに日本語が入ってるとか
907: 896 [sage] 2011/12/28(水) 19:58:14.00 AAS
CPP 言語オプションだけを記述した Test.hs に対して ghci -v Test.hs すると、
*** C pre-processor: でプリプロセスコマンドが表示され、
その直後に次のように表示されて処理が止まります
ghc.exe: fd:5: hGetContents: invalid argument (invalid UTF-8 byte sequence)
ここで、[Ctrl+C] キーで処理を止めると Interrupted. と表示されてから、
いつもの ghci のプロンプトになります
Arrows 言語オプションだけを記述した Test.hs ファイルの場合は、
全く問題なく(処理は止まらず)いつもの ghci のプロンプトになります
*** C pre-processor: で表示されたプリプロセスコマンドは以下の通りです
(見やすさの為適当に改行を入れ、パスに本名がローマ字で入っているので伏せました
また、最後の -o の出力パスはテンポラリファイルなので適当に変えました)
-------------------------------
"Haskell Platform2011.4.0.0のフォルダ\lib\..\mingw\bin\gcc"
-E -undef -traditional -v
-I "Haskell Platform2011.4.0.0のフォルダ\lib\base-4.3.1.0\include"
-I "Haskell Platform2011.4.0.0のフォルダ\lib/include"
-D__GLASGOW_HASKELL__=700 -Dmingw32_BUILD_OS=1 -Di386_BUILD_ARCH=1
-Dmingw32_HOST_OS=1 -Di386_HOST_ARCH=1 -x c Test.hs -o out.hscpp
-------------------------------
このプリプロセスコマンドを実行してみたところ、
こちらは止まらず、また特にエラー報告もなく out.hscpp が出力されました
このファイルの内容は >>905 の結果の出力と同一です
どうも、この現象は私だけみたいですね
908: 896 [sage] 2011/12/28(水) 20:00:23.21 AAS
>>906
> カレントディレクトリかテンポラリディレクトリのパスに日本語が入ってるとか
それは無いです
909(1): デフォルトの名無しさん [sage] 2011/12/28(水) 20:16:52.26 AAS
>>897897(2): 896 [sage] 2011/12/27(火) 23:18:53.79 AAS
問題がだいぶ絞り込めました
{-# LANGUAGE CPP #-}
たったこれだけ書かれた Test.hs ファイルを ghci 上でロードすると、
Test.hs:0:4: lexical error (UTF-8 decoding error)
Failed, modules loaded: none.
と表示されエラーとなりますが、エラーの意味が分かりません
{-# LANGUAGE Arrows #-}
例えばこれだけ書かれた Test.hs ファイルなら、普通にロードできます
これ GHC 7.2.2 のバグでしょうか
それとも意図された振る舞いなのでしょうか
後者なら、このエラーはどのような意味なのでしょうか
暇だったからLANGUAGE CPPの方やってみたけど、問題なかった。当たり前か。ghciはversion 7.0.4でした。
変な制御文字でも埋まってるんじゃない?od -x -c Test.hsで見てみたら?
910: 896 [sage] 2011/12/28(水) 20:44:13.27 AAS
>>909
od コマンドが無いんで(Windows 7 環境)適当なバイナリエディタで見てみた
-------------------------------
{-# LANGUAGE CPP #-}
-------------------------------
7B 2D 23 20 4C 41 4E 47 55 41 47 45 20 43 50 50 20 23 2D 7D
-------------------------------
全く問題ないですよね
とりあえず、問題の stm パッケージさえインストールできれば作業は進むから、
#ifdef __GLASGOW_HASKELL__ などのマクロを外して自力でプリプロセスしようと思います
ですが、ひとつ問題が
#if ! (MIN_VERSION_base(4,2,0))
これは今使ってる base のバージョンが例えば 4.3.1.0 の場合、
これと #endif で挟まれている部分のコードは生きるんですよね
911: 896 [sage] 2011/12/28(水) 21:41:55.67 AAS
あかん
たとえ stm パッケージが無事インストールできても、
他の必要なパッケージで同じ問題が起きることに気づいた
もう OS 再インストールしか方法はないのかも知れん
912: 896 [sage] 2011/12/28(水) 21:59:15.96 AAS
意味も分からず解決してしまった
mingw-get-inst-20111118.exe をインストールしていたんだが、
これをアンインストールして、そのインストール先の mingw フォルダも全て削除したら、
何事も問題なく C のプリプロセッサ(CPP オプション)が使えるようになった
環境変数に mingw フォルダ内のどこかへのパスがあったわけでもないんだが、
なんでこれで解決するのか意味が分からない
GHC 内の mingw と干渉していたのではないかと思うが、
今まで普通に GHC と外部の mingw は共存できてたと思うんだが・・・
まぁいいや
お騒がせしました
913: デフォルトの名無しさん [sage] 2011/12/30(金) 15:54:38.20 AAS
windowsなんて捨ててlinux/mac系でやれば楽なのにね。
914: デフォルトの名無しさん [sage] 2011/12/30(金) 17:05:32.28 AAS
全くだ
915: デフォルトの名無しさん [sage] 2011/12/30(金) 17:09:47.04 AAS
馬鹿には無理
916: デフォルトの名無しさん [sage] 2011/12/30(金) 17:30:27.49 AAS
むしろ馬鹿ほどmacだと思う
917: 896 [sage] 2011/12/31(土) 11:39:52.12 AAS
wxHaskell を使ってるんだけど、以下のコードの挙動が予想外だ
(dc は paint イベントのハンドラの第1引数 DC () 型)
drawText dc "abc" (Point 0 0)
[ textColor := green
, textBgcolor := blue
]
俺の予想だと、青色の背景に緑色の文字が表示されると思ってたんだ
でも実際は、透明の背景に青色の文字が表示される
これは正しい挙動なのか、それともバグなのか?
[環境]
OS : Windows7
GHC : 7.2.2
wxPack : 2.8.12.01
wx : 0.12.1.6
wxCore : 0.12.1.7
918(2): デフォルトの名無しさん [sage] 2011/12/31(土) 11:48:50.85 AAS
wxHaskellは知らないけど
wx的にはwxDC::setBackgroundMode()で挙動が変化したような?
919: デフォルトの名無しさん [sage] 2011/12/31(土) 13:36:42.19 AAS
>>918
ありがと
ただ、残念なことに、今の wxHaskell では
DC の BackgroundMode を設定できないみたいだ
それらしい関数やプロパティが見当たらない
920(2): デフォルトの名無しさん [sage] 2011/12/31(土) 16:32:13.81 AAS
これじゃね
外部リンク[html]:hackage.haskell.org
921: デフォルトの名無しさん [sage] 2011/12/31(土) 18:43:32.49 AAS
>>920
あ、なるほど dcSetBackgroundMode か
頭文字 s とか b で探してた
(部分一致とかで検索できないと不便だなぁ)
ありがと
922: デフォルトの名無しさん [sage] 2011/12/31(土) 19:26:08.59 AAS
>>918,920
dcSetBackgroundMode 関数に 100(wxSOLID)を設定してみたところ、
文字の背景に色が付きました
しかし、これだけでは背景の色は真っ白でした
そこで、次の様にしてみたところ、意図通りの結果
背景が黒で文字が赤色になりました
withBrushStyle (brushSolid black) $ \b -> do
dcSetBackground dc b
dcSetBackgroundMode dc 100
dcSetTextForeground dc red
dcSetTextBackground dc black
drawText dc "abc" (Point 0 0) []
どうも、drawText 関数とか set 関数で設定する textColor や textBgcolor は
正しく反映されないみたいです
(textBgcolor が文字の色になり、textColor が反映されない?)
おかげさまで目的は達成できました、ありがとうございました
時間がとれたらバグ報告してみようと思います(英文作るのにかなり時間がかかるんで)
923: デフォルトの名無しさん [sage] 2011/12/31(土) 23:24:55.57 AAS
よいHaskellを!
来Haskellは更に良いHaskellになるよう祈ってます。
924: デフォルトの名無しさん [sage] 2012/01/01(日) 00:00:43.17 AAS
おめでとう
925(2): デフォルトの名無しさん [] 2012/01/01(日) 21:54:51.56 AAS
なんだよ。789、790あたりを見てから、やっぱりモナドは注目すべきなんだろう
と思ってちょっと調べていたんだが、もうとっくの前に情報処理上で和田英一
さんが喝破しているじゃないか。やっぱりモナドなんて騒ぐほどのものじゃねえよ!
「関数プログラミングの泣き所は入出力を含む副作用である。...Haskellは
シリアルに計算を進めるメカニズムのmonadを考案し、これを解決したと言っ
ているが、関数型を一部手放したと言うべきであろう。Lispにも最初からprog
があった。」
926: デフォルトの名無しさん [sage] 2012/01/01(日) 22:18:00.73 AAS
理解が追いつかないことでの話のすり替えだね
927(1): デフォルトの名無しさん [sage] 2012/01/01(日) 22:30:27.00 AAS
和田英一って適当なこと言うんだな
「関数型を手放した」というのは意味不明だし、
モナドとIOを区別してないのは(言いたいことは分からんでもないが)雑な議論
928: デフォルトの名無しさん [sage] 2012/01/01(日) 22:36:12.24 AAS
和田サンは鞍とキーボードを同一視するくらいの人だからな
モナドとIOなんて同じようなもんなのだろう
達観してる
上下前次1-新書関写板覧索設栞歴
あと 50 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.026s