建立固定大小的Nat N.

时间:2016-10-05 14:37:41

标签: scala shapeless

我尝试定义一个函数,在给定N <: Nat类型参数的情况下,构建一个恰好有3 N的列表。

import shapeless._
import shapeless.nat._

scala> def natNOfSize3[N <: Nat](n: Nat): Sized[List[N], _3] = 
     Sized[List, _3](List(n, n, n))
<console>:17: error: wrong number of type parameters for overloaded method value apply with alternatives:
  [CC[_]]()(implicit cbf: scala.collection.generic.CanBuildFrom[Nothing,Nothing,CC[Nothing]], implicit ev: shapeless.AdditiveCollection[CC[Nothing]])shapeless.Sized[CC[Nothing],shapeless._0] <and>
  [CC[_]]=> shapeless.SizedBuilder[CC]

       def natNOfSize3[N <: Nat](n: Nat): Sized[List[N], _3] = Sized[List, _3](List(n, n, n))             ^

但我不明白为什么会失败。

1 个答案:

答案 0 :(得分:2)

一个问题是,您header('Content-Type: application/json'); $search_artist = rawurlencode($_POST['search_artist']); $search_title = rawurlencode($_POST['search_title']); if($search_artist && !$search_title) { //Search for Artist only $url = "https://api.spotify.com/v1/search?q=*".$search_artist."*&type=artist"; } else if(!$search_artist && $search_title) { //Search for title only $url = "https://api.spotify.com/v1/search?q=*".$search_title."*&type=track"; } else if($search_artist && $search_title) { //Search for Artist AND Title $url = "https://api.spotify.com/v1/search?q=*".$search_artist."*&type=artist&q=*".$search_title."*&type=track"; } $contents = file_get_contents($url); echo json_encode($contents); 的输入是n,而不是Nat - 我认为这只是一个错字。一旦你解决了这个问题,就可以编写如下方法:

N

请注意,import shapeless._, nat._ def natNOfSize3[N <: Nat](n: N): Sized[List[N], _3] = Sized[List](n, n, n) 采用类型Sized.apply的单一类型参数,而不是提供集合,而是提供元素。

如果您确实要传递集合,可以使用* -> *

wrap

但是如果你对元素的数量感到不满,那么编译器就无法帮助你了。