4,232 karma · joined October 6, 2009
https://parcero.ai/
https://verbose.ly
“This is the weapon of a Jedi Knight. Not as clumsy or random as a blaster. An elegant weapon for a more civilized age.”
Neurotone is developing an AI powered auditory training system to assist people with hearing disabilities get the most out of their hearing aids. We are utilizing the clinically proven LACE methodology to facilitate the best outcome for every patient, and we are partnered with a number of thought leaders in the audiology community to ensure we are delivering the most effective solution on the market.
We are looking for experienced mobile developers (Expo/React Native) as well as backend developers with a strong knowledge using Postgres (Supabase) for role based authentication, queuing, RLS, and as an API gateway (PostgREST).
We are extremely passionate about technology, and our entire core team is composed of industry veterans with successful exits in previous ventures. This is a proven product with existing revenue that we are excited to take to the next level, more importantly, this system can provide a dramatic improvement the quality of life for people suffering with auditory disabilities.
Please contact travis AT neurotone.com if interested. Thanks!
In Practice, row polymorphism is more granular, allowing you to explicitly allow certain fields while tracking all other fields via a ("rest") type variable.
Example: PureScript allows you to remove specific fields from a record type. This feature, is called record subtraction, and it allows more flexibility when transforming or narrowing down records.
You can also apply exact field constraints; meaning, you can constrain records to have exactly the fields you specify.
Lastly, PureScript allows you to abstract over rows using higher-kinded types. You can create polymorphic functions that accept any record with a flexible set of fields and can transform or manipulate those fields in various ways. This level of abstraction is not possible in TypeScript.
These are just a few examples. In the most general sense, you can think of row polymorphism as a really robust tool that gives you a ton of flexibility regarding strictness and validation.
greet :: forall r. { name :: String | r } -> String
greet person = "Hello, " <> person.name <> "!"
greetWithAge :: forall r. { name :: String, age :: Int | r } -> String
greetWithAge person =
"Hello, " <> person.name <> "! You are " <> show person.age <> " years old."
main :: Effect Unit
main = do
let person = { name: "Alice", age: 30, occupation: "Engineer" }
-- greet can accept the person record even though it has more fields
log (greet person) -- Output: "Hello, Alice!"
-- greetWithAge can also accept the person record
log (greetWithAge person)