/ / newtypeコンストラクターの呼び出し-haskell、matrix

newtypeコンストラクタを呼び出す - haskell、matrix

私は実際にモジュールを操作する方法を得ていませんHaskellでは、私はこの言語に本当に慣れていないので、これまでのところ、関数の作成など、最も基本的なことしか知りません。今のところ、

Not in scope: data constructor "Mat"

これは、マトリックスのnewtype定義のコンストラクターであると想定されています。これはモジュールです:

module Matrix (Matrix, fillWith, fromRule, numRows, numColumns, at, mtranspose, mmap) where
newtype Matrix a = Mat ((Int,Int), (Int,Int) -> a)

fillWith :: (Int,Int) -> a -> (Matrix a)
fillWith (n,m) k = Mat ((n,m), ((_,_) -> k))

fromRule :: (Int,Int) -> ((Int,Int) -> a) -> (Matrix a)
fromRule (n,m) f = Mat ((n,m), f)

numRows :: (Matrix a) -> Int
numRows (Mat ((n,_),_)) = n

numColumns :: (Matrix a) -> Int
numColumns (Mat ((_,m),_)) = m

at :: (Matrix a) -> (Int, Int) -> a
at (Mat ((n,m), f)) (i,j)| (i > 0) && (j > 0) || (i <= n) && (j <= m) = f (i,j)

mtranspose :: (Matrix a) -> (Matrix a)
mtranspose (Mat ((n,m),f)) = (Mat ((m,n),(j,i) -> f (i,j)))

mmap :: (a -> b) -> (Matrix a) -> (Matrix b)
mmap h (Mat ((n,m),f)) = (Mat ((n,m), h.f))

私は自分のモジュールで次のように呼び出しています:

module MatrixShow where
import Matrix


instance Matrix (Show a) => Show (Matrix a) where
show Mat ((x,y),(a,b)) = show 1

ショー1は単なるテストです。私はそれが何なのかさえわからない

instance Matrix (Show a) => Show (Matrix a) つまり、彼らは私たちにこのコードを与え、それからこれらのことで何が起こっているのかを説明せずにそれを理解するように言ったということです。

誰かが私を助けることができるならば、私は感謝します。 Haskellでは、マトリックスの内容を印刷することは非常に基本的であると推測しており、本来よりも難しくしていると確信していますが、この言語の新人としては、私は本当に「時々やってます。

回答:

回答№1は4

コンストラクターをエクスポートします。

module Matrix (Matrix(..), fillWith, fromRule, -- etc.
--   ^^^^

デフォルトでは、タイプのみがエクスポートされ、他のモジュールがコンストラクターにアクセスできなくなります。

この線

instance Matrix (Show a) => Show (Matrix a) where

私には間違っているように見えます。ありますか Matrix 周りのクラス?おそらく、それは読むべきです

instance (Show a) => Show (Matrix a) where

また、行

show Mat ((x,y),(a,b)) = show 1

間違っている。その左側は次のようになります

show (Mat ((x,y), f)) = ...