Я действительно не получаю, как работать с модулями в Haskell, я действительно новичок в этом языке, и до сих пор я знаю только самые основные вещи, такие как создание функции и такого рода вещи. Сейчас я получаю сообщение об ошибке:Вызов конструктора newtype
Not in scope: data constructor 'Mat'
Это должно быть конструктором для определения ньютайпов матрицы. Это модуль:
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, и я уверен, что я делаю это сложнее, чем должно быть, но все же, как новичок на этом языке, я не совсем уверен, что я иногда делаю.
Я изменил его, но его все еще говорит мне, «Не в области видимости: конструктор данных«Mat» ' – Argus
@Argus Проверьте перекомпилированы ли модуль после изменения. GHCi также должен забрать изменения без явной перекомпиляции. – chi
Да, все сделано, спасибо. – Argus