module Main where
import Graphics.Rendering.OpenGL
data Shaders = Shaders { vertexShader :: VertexShader
, fragmentShader :: FragmentShader
, program' :: Program
, positionA :: AttribLocation }
data Resources = Resources { vertexBuffer :: BufferObject
, elementBuffer :: BufferObject
, shaders :: Shaders
, fadeFactor :: GLfloat }
main :: IO ()
main = do
putStrLn "test"
ghci の出力は次のとおりです。
[1 of 1] Compiling Main ( /home/madjestic/Projects/Haskell/OpenGL/triangle_02/Main_test.hs, interpreted )
/home/madjestic/Projects/Haskell/OpenGL/triangle_02/Main_test.hs:11:45:
Not in scope: type constructor or class `VertexShader'
A data constructor of that name is in scope; did you mean -XDataKinds?
/home/madjestic/Projects/Haskell/OpenGL/triangle_02/Main_test.hs:12:45:
Not in scope: type constructor or class `FragmentShader'
A data constructor of that name is in scope; did you mean -XDataKinds?
Failed, modules loaded: none.
エラーは、タイプまたはクラスのコンストラクターがスコープ内にないことを示していますが、同時に「その名前のデータコンストラクターはスコープ内にあります...」と述べていますが、理解できないDataKindsを使用することを提案していますなぜ必要なのですか - DataKinds 拡張機能なしで、同じコードが古い Linux ボックスで正常にコンパイルされますが、新しい環境では動作しないようです。私は現在、主に Portage ライブラリに依存していますが、古い環境は cabal ライブラリに依存していましたが、それが違いを引き起こしているのだろうか? ここで何が問題なのですか?データ型コンストラクターは、インポートされている Graphics.Rendering.OpenGL に存在します - なぜ ghc はここでそれを使用できないのですか?