Skip to content
Demur Nodia edited this page Oct 2, 2018 · 3 revisions

Fsharp Type Provider

  • Static parameters <> - Angle brackets are used to supply static parameters, meaning parameters that are known at compile time. Static parameters typically give type providers necessary information to access some external information source

  • Dynamic parameters () - used in Runtime

  • Generated types - are regular .net types, if you want to use generated types in other .net languages you have to generate them with the F# compiler in some separate assembly.

  • Erased types - are no regular types. In fact, even in F#, the only way you can get them is with type providers.

  • Modern compilers - Modern compilers work not only when you explicitly try to compile something.

  • MetaProgramming - More formally, type providers are a form of compile time meta-programming

Published Document

Useful resources & Tutorials

Worldbank

Visuals

http://tomasp.net/blog/2015/fslab-world-visualization/ gamma: http://thegamma.net/files/cj2015.pdf

API

Fsharp F#

Tutorials

Source

wiki docs

Urls

Problems

  • Could not create SSL/TLS secure channel

  • https://github.com/fsprojects/Paket/issues/3065

  • new-itemproperty -path "HKLM:\SOFTWARE\Microsoft.NETFramework\v4.0.30319" -name "SchUseStrongCrypto" -Value 1 -PropertyType "DWord";

  • new-itemproperty -path "HKLM:\SOFTWARE\Wow6432Node\Microsoft.NETFramework\v4.0.30319" -name "SchUseStrongCrypto" -Value 1 -PropertyType "DWord"

  • packet restore

FSharp.Data

...Provider.fs

XmlProvider, JsonProvider, HtmlProvider, CsvProvider

inherit DisposableTypeProviderForNamespaces(cfg, assemblyReplacementMap=[ "FSharp.Data.DesignTime", "FSharp.Data" ])

let asm = AssemblyResolver.init cfg (this :> TypeProviderForNamespaces)
let ns = "FSharp.Data"
let xmlProvTy = ProvidedTypeDefinition(asm, ns, "XmlProvider", None, hideObjectMethods=true, nonNullable=true)
let jsonProvTy = ProvidedTypeDefinition(asm, ns, "JsonProvider", None, hideObjectMethods=true, nonNullable=true)
let htmlProvTy = ProvidedTypeDefinition(asm, ns, "HtmlProvider", None, hideObjectMethods=true, nonNullable=true)
let csvProvTy = ProvidedTypeDefinition(asm, ns, "CsvProvider", None, hideObjectMethods=true, nonNullable = true)

let buildTypes (typeName:string) (args:obj[]) = 
    ...
    generateType (if schema <> "" then "XSD" else "XML") source getSpec this cfg encodingStr resolutionFolder resource typeName None
    generateType "JSON" source getSpec this cfg encodingStr resolutionFolder resource typeName (*maxNumberOfRows*)None
    generateType "HTML" (Sample sample) getSpec this cfg encodingStr resolutionFolder resource typeName (*maxNumberOfRows*)None
    generateType "CSV" (if sample <> "" then Sample sample else Schema schema) getSpec this cfg  encodingStr resolutionFolder resource typeName maxNumberOfRows




let parameters = [ProvidedStaticParameter("StaticBoolParam", typeof<bool>, parameterDefaultValue = false)]
let helpText = """<summary>...</summary><param name='Sample'>...</param>"""

do ...ProvTy.AddXmlDoc helpText
do ...ProvTy.DefineStaticParameters(parameters, buildTypes)
// Register the main type with F# compiler
do this.AddNamespace(ns, [ ...ProvTy ])
t.AddMember
t.AddMembers
t.AddMembersDelayed
t.AddXmlDocDelayed
let wsEntryPoint = serviceUrl
// Structural metadata queries:
// https://ws-entry-point/resource/agencyID/resourceID/version/itemID?queryStringParameters
// https://api.worldbank.org/v2/sdmx/rest/dataflow/all/all/latest/  WorldBank Dataflows
let dataflowsResource = "dataflow"
let defaultAgencyID = "all"
let defaultResourceID = "all"
let defaultVersion = "latest"

Clone this wiki locally