Вот моя проблема ... Я не понимаю, почему это не работает для меня:)
Если говорить более конкретно, у меня есть функция get files (не проблема, но обратная связь приветствуется):
type DirectoryOptions = Directory of string * Option<SearchOption>
type SearchOptions =
| SearchSubDirectories
| SearchCurrentDirectory
let WithExtensionIn extlist filename =
let fileext = Path.GetExtension filename
extlist |> Seq.exists (fun e -> e = fileext)
let GetFiles dir extlist =
match dir with
| Some diroptions ->
let directoryname, suboptions = diroptions
match suboptions with
| Some SearchSubDirectories | None ->
Directory.GetFiles(directoryname, "*.*", SearchOption.AllDirectories)
|> Seq.filter (WithExtensionIn extlist)
| Some SearchCurrentDirectory ->
Directory.GetFiles(directoryname, "*.*", SearchOption.TopDirectoryOnly)
|> Seq.filter (WithExtensionIn extlist)
| None ->
Directory.GetFiles(Directory.GetCurrentDirectory(), "*.*", SearchOption.AllDirectories)
|> Seq.filter (WithExtensionIn extlist)
Я хочу объединить это в функцию «Получить дубликаты файлов».Возможно, я не смогу, но я пытаюсь погрузиться в функциональное мышление.Моя текущая попытка, которая, исходя из моего понимания, должна работать, не работает.Это означает, что мое понимание неверно, и я хотел бы получить помощь / разъяснение о том, как решить эту проблему.Насколько я понимаю, в композиции функций самая внутренняя функция может иметь n входных параметров, но только один выход, а остальные функции, которые обертывают ее, могут иметь только один вход и один выход.Я не совсем уверен, как интерпретируется первая функция (возможно, это плохое слово) в контексте композиции в F #, потому что нет четкого ввода / вывода.Я считаю, что это прямое влияние карри.
Вот моя текущая попытка:
let GetDuplicateFiles =
let LengthAndExtension file =
//this is faked for simplicity
(12, ".htm")
let GroupSizeGreaterThanOne group =
let _, values = group
Seq.length values > 1
let content file =
//again faked
()
let groups items =
snd items
GetFiles
>> Seq.groupBy LengthAndExtension
>> Seq.filter GroupSizeGreaterThanOne
>> Seq.collect groups
>> Seq.groupBy content
>> Seq.filter GroupSizeGreaterThanOne
>> Seq.collect groups
Это дает мне ошибку компиляции на Seq.groupBy LengthAndExtension, ошибка типа '' b-> seq 'несовместим с типом' seq <'a>'
Любые мысли / отзывы приветствуются.Я думаю, что я ищу момент ах ха, если вы знаете, что я имею в виду