let products = ["5000171002525","Tuna", 0.59M; "54491014", "Coke", 0.33M] let stream = Seq.initInfinite (fun _ -> printf ">"; System.Console.ReadLine()) let scans = stream |> Seq.takeWhile (fun s -> s.Length > 0) let items = scans |> Seq.fold (fun items scan -> match products |> List.tryFind (fun (code,_,_) -> scan = code) with | Some((_,n,p) as product) -> printfn "%s\t@ %A" n p; product::items | None -> printfn "Not found"; items ) [] items |> List.sumBy (fun (_,_,price) -> price) |> printf "Total %A"