関数型プログラミング言語Haskell Part12at TECH
関数型プログラミング言語Haskell Part12 - 暇つぶし2ch745:デフォルトの名無しさん
10/08/18 21:54:34
GLFW を使おうとしたら、openWindow 関数の第1引数でエラーが出ました。

次のがエラーが出る最小限のコードです。

import Graphics.Rendering.OpenGL as GL
import Graphics.UI.GLFW as GLFW

a = GLFW.openWindow (GL.Size 640 480)

ghci を立ち上げて、上記コードを書いたファイルをロードしたら、
次のエラーが出ました。

Couldn't match expected type `OpenGL-2.2.3.0:Graphics.Rendering.OpenGL.GL.CoordTrans.Size'
       against inferred type `Size'

環境は次の通りです。

Windows7
Haskell Platform 2010.2.0.0 (GHC 6.12.3)
opengl-2.4.0.1
glfw-0.4.2

Haskell の OpenGL ライブラリのバージョンが新しすぎるのでしょうか。

746:デフォルトの名無しさん
10/08/19 07:53:07
Haskell の OpenGL には glPushMatrix と glPopMatrix に対応する関数はないの?

747:デフォルトの名無しさん
10/08/19 10:38:23
ghciで,メモリ使いまくるので関数の評価を強制終了させたんですが
メモリ使用量は減りません。
強制カベッジコレクションはできますか?

748:デフォルトの名無しさん
10/08/19 11:14:06
強制GCはSystem.Mem.performGCでできるけど、ghciのメモリ消費自体は減らないはず
URLリンク(hackage.haskell.org)

749:デフォルトの名無しさん
10/08/19 19:19:04
>>748
Thank you anyway.

750:デフォルトの名無しさん
10/08/20 02:24:14
>>746
これ
  preservingMatrix :: IO a -> IO a
渡したIO aの前後でpopとpushを自動的にやってくれる
  preservingMatrix $ do
    loadIdentity
    ....
みたいに使う

751:デフォルトの名無しさん
10/08/20 07:40:46
>>750
そいつか、ありがと

今まで Graphics.Rendering.OpenGL.Raw から
glPushMatrix と glPopMatrix をわざわざインポートしてた


752:デフォルトの名無しさん
10/08/20 07:41:29
状態変更関数の固まりのせいで返って読みにくくなっちゃうのか>>OpenGLをHaskellで使う


753:デフォルトの名無しさん
10/08/20 12:37:49
>>752
状態変更関数による読み難さはそれほどでもない

それよりも GLfloat や GLint などへの型変換がうっとうしい
fromIntegral や realToFrac などの関数と :: GLfloat とか
:: Vector3 GLfloat などの明示的な型宣言をセットで書かないといけない

だから、結局のところ楽に記述できるように一枚ラップを自作することになる

754:忍者Perl ◆M5ZWRnXOj6
10/08/21 12:13:57
なにこのクソスレまだあったんすか!!ッシュッシュッシュ!!!!!!!!!!!!!!!!!!!!!!!!!!!

シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!シュッシュッシュパネーーーーーーーーーーッス!!wwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

755:デフォルトの名無しさん
10/08/22 22:50:36
「やさしい Haskell 入門」や「本物のプログラマは...」 などで紹介されている
遅延パターンの説明で
-- ファイル: TT.hs
module Main where
reqs         = client inits resps
resps        = server reqs
client  a (b:bs)  = a : client (next b) bs   -- ①非遅延束縛とした場合
server   (c:cs)  = process c : server cs
inits        = 0
next d        = d
process e      = e+1
main = print $ take 10 reqs
-- ファイル END

非遅延パターンで実行形式を ghc --make TT.hsで作成し、
$ ./TT
TT.exe: <<loop>>
と表示され
ghci では
$ ghci TT.hs
:main
  (エラー表示なしで終了しない)
となります。
実行形式の場合の <<loop>> とは、stack overflow となることを
実行時の処理系が検知して表示しているのでしょうか?その場合
ghci が終了しないのは何故でしょうか?
stack overflow と関係ない場合の <<loop>> の意味は?

756:デフォルトの名無しさん
10/08/22 23:27:58
>>755
式の評価が無限ループに陥ったことを検出してる
(技術的には、あるサンクの評価中にそのサンクの値が必要になったらNonTermination例外を投げる)
ある意味お節介機能だし、完全にやるのは無理なので、働かなくても文句は言えない
ghciで働かないのは何故だろう、俺は知らない

757:デフォルトの名無しさん
10/08/23 09:01:31
>>756
ありがとうございます。
>あるサンクの評価中にそのサンクの値が必要になったらNonTermination例外を投げる)
サンク reqs の評価中に、client をサンク respsに適用しようとして
resps の評価に、server をサンク reqs に適用しようとして、
ループを検出する。ということですね

758:Perl忍者 ◆M5ZWRnXOj6
10/08/24 17:15:52
自称博士+研究者の集い(笑)

759:デフォルトの名無しさん
10/08/24 20:38:38
Perl忍者()

760:デフォルトの名無しさん
10/08/24 20:59:27
スルーできてない男の人って…

761:デフォルトの名無しさん
10/08/24 21:04:04
スルーしたら俺の常駐スレにやってきちゃうだろ!

762:デフォルトの名無しさん
10/08/24 21:08:29
どこよ

763:デフォルトの名無しさん
10/08/27 11:41:21
このリスト内包表現中のlet式ってどう考えたらいいの?
let式が二つ連続してるし、inがないんだけど。。

[ x | y <- [1..99], z <- [y..99],
let x = y * z,
let s = show x,
s == reverse s ]

764:デフォルトの名無しさん
10/08/27 11:44:57
ふつうのlet式とは関係ないと考える

765:デフォルトの名無しさん
10/08/27 12:33:25
do式の「let文」と同じようなもの

do
  y <- [1..99]
  z <- [y..99]
  let x = y * z
  let s = show x
  guard (s == reverse s)
  return x


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch