2016-04-09 2 views
3

Моя попытка ниже не работает:Возможно ли использование без объекта бесформенного.Poly1, который работает с Везде?

class Absolute(rootDir: File) extends Poly1 { 
    implicit def caseFile[F <: File]: Case[F] { type Result = File } = at[F] { f => 
    if (f.isAbsolute) 
     f 
    else 
     val parts = 
     file.getPath.split(Pattern.quote(File.separator)).toList.filterNot(Set("", ".")) 
     parts match { 
     case ":root-dir" :: tail => tail.foldLeft(rootDir)(new File(_, _)) 
     case ":home" :: tail => tail.foldLeft(new File(sys.props("user.home")))(new File(_, _)) 
     case _ => f 
     } 
    } 
} 

object Absolutised { 
    def from(rootDir: File) = new Runner(new Absolute(rootDir)) 

    final class Runner(absolute: Absolute) { 
    def apply[T](t: T)(implicit everywhere: Everywhere[absolute.type, T]) = everywhere(t) 
    } 
} 
+0

Вы видели [эту тему] (https://groups.google.com/d/msg/shapeless-dev/P5DXRgnzqkY/E76joeGZyqAJ)? –

+0

Нет, я не смог найти это. Спасибо Трэвису. –

+0

Извините, что это не лучшие новости ... :( –

ответ

1

Не идеально, но есть обходной путь работает в Скале 2.11.8 с бесформенной 2.3.0:

object Absolutised { 
    def from(rootDir: File) = new Runner(rootDir) 

    final class Runner(rootDir: File) { 

    object ab2 extends Absolute(rootDir) 

    def apply[T](t: T)(implicit everywhere: Everywhere[ab2.type, T]) = everywhere(t) 
    } 
} 
+0

И вы можете избежать 'Case [F] {type Result = File}' с 'Case.Aux [F, File]'. – guersam

+0

Кажется не работает: -/I ' Мне нужно сделать еще несколько исследований, посмотреть, могу ли я понять, почему нет. –

+0

Это странно ... у вас есть какой-то тип коллекции, отличный от 'List' в вашем классе case? – guersam

Смежные вопросы