首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从hmatrix库中创建Matrix和Vector的functor实例?

如何从hmatrix库中创建Matrix和Vector的functor实例?
EN

Stack Overflow用户
提问于 2013-03-08 01:50:28
回答 2查看 643关注 0票数 3

MatrixVector构造函数都有友好的*->*,所以它们看起来像值构造函数。但是当我尝试像这样的东西

代码语言:javascript
复制
instance Functor Vector a where
    fmap g ( Vector a ) = Vector ( g a )

我得到了这个错误:

代码语言:javascript
复制
 Not in scope: data constructor `Vector'

这是有道理的,因为我无论如何都不能使用let v = Vector [1..3]来生成一个向量。但是检查源代码,我发现Matrix和Vector构造函数都是从各自的模块导出的:

代码语言:javascript
复制
Vector.hs
module Data.Packed.Vector (
    Vector,
    fromList, (|>), toList, buildVecto.. 
) where

Matrix.hs

module Data.Packed.Matrix (
    Element,
    Matrix,rows,cols...
) where

Dido用于应用函数器、单元体等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-08 01:58:20

代码语言:javascript
复制
module Data.Packed.Vector (
    Vector,
    fromList, (|>), toList, buildVecto.. 
) where

这会公开类型Vector,但不会公开它的任何构造函数。

您的实例声明已更正:

代码语言:javascript
复制
instance Functor Vector where
    fmap  = V.map

(假设您使用import Vector as V,并进一步假设您谈论的是向量包中的向量)。

EDIT:对不起,没看到你提到包的名字。对于hmatrix向量,它将是mapVector而不是V.map。

EDIT_ 2:正如其他人所提到的,对于hmatrix,这不会起作用,因为矩阵和向量的内容都需要Storeable

票数 2
EN

Stack Overflow用户

发布于 2013-03-08 16:28:26

正如Conrad Parker所说,我们需要Storable实例。

代码语言:javascript
复制
{-# LANGUAGE ConstraintKinds, TypeFamilies #-}

import Numeric.LinearAlgebra
import Foreign.Storable(Storable)
import GHC.Exts (Constraint)

class Functor' c where
  type Ok c u v :: Constraint
  type Ok c u v = ()

  fmap' :: Ok c u v => (u -> v) -> c u -> c v

instance Functor' Vector where
  type Ok Vector u v = (Storable u, Storable v)
  fmap' = mapVector
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15278221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档