这可能是一个非常基本的问题,但我已经四处寻找,似乎无法找到答案。
我想使用未装箱的矢量来表示2D列表。使用法线向量很容易做到这一点:
> import qualified Data.Vector as V
> V.fromList [V.fromList [1..5]]
[[1,2,3,4,5]]
但是,如果我尝试使用未装箱的载体:
> import qualified Data.Vector.Unboxed as U
> U.fromList [U.fromList [1..5]]
我收到以下错误:
• Non type-variable argument
in the constraint: U.Unbox (U.Vector a)
(Use FlexibleContexts to permit this)
• When checking the inferred type
it :: forall a.
(U.Unbox (U.Vector a), U.Unbox a, Num a, Enum a) =>
U.Vector (U.Vector a)
我怀疑它与此有关:
> V.fromList [1..5]
[1,2,3,4,5]
,而
> U.fromList [1..5]
[1.0,2.0,3.0,4.0,5.0]
但我似乎无法理解如何避免这种情况。
提前致谢!
答案 0 :(得分:5)
好吧,我们可以开始遵循编译器给出的建议:
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let dateFormatter = DateFormatter()
//dateFormatter.dateStyle = DateFormatter.Style.short
dateFormatter.dateFormat = "dd.MM.yyyy HH:mm"
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "workoutDateCell", for: indexPath) as! WorkoutDateTableViewCell
cell.typeLabel.text = "Beginn"
cell.dateDatepicker.date = Date()
cell.dateDatepicker.tag = indexPath.row
cell.dateLabel.text = dateFormatter.string(from: cell.dateDatepicker.date)
cell.selectionStyle = .none
return cell
}
else if indexPath.row == 1 {
let cell = tableView.dequeueReusableCell(withIdentifier: "workoutDateCell", for: indexPath) as! WorkoutDateTableViewCell
cell.typeLabel.text = "Ende"
cell.dateDatepicker.date = Date()
cell.dateDatepicker.tag = indexPath.row
cell.dateLabel.text = dateFormatter.string(from: cell.dateDatepicker.date)
cell.selectionStyle = .none
return cell
}
else {
let cell = tableView.dequeueReusableCell(withIdentifier: "workoutSportsCell", for: indexPath) as! WorkoutSportsTableViewCell
cell.sportsLabel.text = "Sportart"
cell.sportstypeLabel.text = workoutSports[coreData.getSportsIndex()]
cell.sportsPicker.delegate = self
cell.sportsPicker.dataSource = self
cell.sportsPicker.selectRow(coreData.getSportsIndex(), inComponent: 0, animated: false)
cell.selectionStyle = .none
return cell
}
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if selectedCellIndexPath == indexPath.row {
return selectedCellHeight
}
return unselectedCellHeight
}
然而:
> :set -XFlexibleContexts
这里的问题是你无法取消装箱矢量(即使它是未装箱的数据)。要取消装箱数据类型,您需要精确描述字节布局,包括其大小。但是矢量没有大小。考虑例如。
> U.fromList [U.fromList [1..5]]
<interactive>:10:1: error:
• No instance for (U.Unbox (U.Vector a0))
arising from a use of ‘print’
即使在C中,这也需要"jagged" matrix,通常用指针(=拳击)表示。