본문 바로가기

프로그래밍 언어 노트/F#

(10)
[F#] F# Computation Expression 톺아보기 F# 의 Computation Expression 의 표현력은 세계 제일! 서론. 모나드와 Expression Haskell 이나 Scala 같은 타 함수형 언어의 경우 Monad 를 위한 문법으로 Do/For 와 같은 Expression 이 존재한다.C# 이나 Kotlin 또는 JS/TS 같은 경우는 Future Monad 에 대해서만 유효한 async / await 문법이 존재하고, Null(Optional) Monad 에 대한 ?. (옵셔널 체이닝) 문법이 존재한다.위 문법은 Syntax Sugar 이며, 없어도 대게 메서드 체이닝으로 쓸수는 있다.즉 함수형에 가까운 언어는 Do/For 와 같이 그냥 "Monad" 자체에 대한 문법을 제공해서 내가 모나드를 설계하면 동작하고,그렇지 않은 언어는 언어..
[F#/Fabulous] fabulous version 2 로 안드로이드 앱 만드는 기나긴 여정 BE 엔지니어가 FE 프로그래밍을 하면서 생긴 [마이너(F#) X 마이너(멀티플랫폼) X 마이너(Fabulous) X 마이너(Version 2)] 의 환장의 콜라보 발단 - 회사의 식대카드중 하나의 사용자 기록을 내가 기록하게됨 - 슬랙에 매번 작성하는데 먹은 사람들 이름 적는게 너무 귀찮음 - 그렇다고 완전 자동화 SW 를 짜기는 너무 어려움 - 그럼 관리를 도와주는 Helper SW 를 짜자! 라는 기적의 논리로 앱을 하나 짤 계획을 세웠다. 최종결과물은 아래와 같은 아주~~~ 간단한 앱이다. 가격, 장소를 입력하고 먹은 사람들은 버튼을 눌러서 추가하고 SEND 를 보내면 슬랙으로 Noti가 오는 그런 시스템.. 너무 간단한 SW 이기 때문에.. 업무에서 사용하고있는 Kotlin 이나 아니면 뭐 MA..
[C#/F#] C# 초기화 코드 제너레이터 github.com/Lee-WonJun/reverse-dummy Lee-WonJun/reverse-dummy C# initialization code generator. Contribute to Lee-WonJun/reverse-dummy development by creating an account on GitHub. github.com C# 프로그램 (닷넷 프로그램)상에 메모리에 올라가있는 인스턴스의 C# 코드를 생성해주는 라이브러리. 사실 실제 SW 용 라이브러리라기 보단, 지금 사용하고있는 소프트웨어의 엔티티 코드를 얻을수있도록, 라이브러리로 만들었다. 참조만 걸면 바로 사용할수있으므로.. F# 이 패턴매칭/ADT 등으로 Type 별로 디스패치하기 더 쉽기때문에 F# 으로 작성했다. 닷넷 환경이므..
[F#/Monad] Fsharp Plus 라이브러리 github.com/fsprojects/FSharpPlus fsprojects/FSharpPlus Extensions for F#. Contribute to fsprojects/FSharpPlus development by creating an account on GitHub. github.com fsprojects.github.io/FSharpPlus//computation-expressions.html Computations Expressions This library allows to use some common computation expressions without writing any boiler plate code. There is a single computation expression: ..
[F#/C#] Native Dll Load 하기 C# 에서 C++ Dll 이야 다들 많이 사용하기때문에 docs.microsoft.com/ko-kr/dotnet/framework/interop/consuming-unmanaged-dll-functions 관리되지 않는 DLL 함수 사용 관리 코드에서 DLL 라이브러리에 구현된 관리되지 않는 함수를 호출할 수 있도록 하는 플랫폼 호출 서비스를 사용하여 관리되지 않는 DLL 함수를 사용합니다. docs.microsoft.com 해당 파트를 보면 C#/ VB/ C++ 에 대한 설명이 나오는데 어이없게 F#만 설명이 쏙 빠져있다.. C# 이든 F# 이든 DllImportAttribute 를 사용하는거는 똑같으니까 똑같이 사용하면 되긴하는데.. 고거 한줄 추가하는게 뭐가 어렵다고 빼놓았는지 모르겠다.. F# 에..
[F#/C#] 닷넷 프레임워크 F#프로젝트 C#에서 참조하기 내 기억에는 분명 vs 2015 에서 는 참조만 걸면 됫는데 vs2019 문제인지 안된다 (닷넷 코어 버전은 참조만 걸면된다, 닷넷 프레임워크도 어쩔때는 참조만 걸어도 된다...) 요렇게 F# (클래스라이브러리, 닷넷 프레임워크 4.6 버전) C# (WPF, 닷넷 프레임워크 4.6 버전) 이 존재하고 F# 라이브러리를 C# 에서 쓰기위해서 참조를 걸면 이런 오류가뜰때가 있다. 이래서 뭐 바인딩 자동생성이나, 이것저것 다 해봣는데 망할 될때도 있고 안될때도 있고 ㅡㅡ 암튼 이렇다면 C# 의 Nuget 설정으로가서 Fsharp 을 다운받아주면된다.. ps. 이것저것해보다 된거라 이게 맞는 해결방법인지는 모름.. ps. 솔루션 자체를 만들때 F# 닷넷 프레임워크 라이브러리 부터 만들면 발생하지 않는거 같기도...
[F#] C# to F#, troubleshooting 마이너의 숙명... 자료가없다! 라이브러리도 없다! (있지만 찾기가 어렵다!) 여튼 F# 은 같은 닷넷으로 C# 라이브러리를 사용할수있는데 다른 패러다임을 가진 언어의 라이브러리를 가져다쓸때 여러가지 트러블슈팅이 발생한다.. 1. 형변환 F# 에서는 :> (= upcast) 와 :?> (= downcast) 로 형변환을 한다. C# 함수를 사용할떄에는 파라미터의 형을 변환해주어서 넘겨주는것이 좋다. data.Append(anchor);// C# data.Append(anchor:>element) // F# 무조건 형을 지정해줘야하는것은 아닌데.. C# 에서 오버로딩된경우 몇몇동작에서 정상적으로 안돌아가더라.., 아마 위에서 추론된 타입형식과 달라서 생기는 문제같다. 처음부터 명시적으로 지정하면 상관없을것..
[F#] F#의 데이터 라이브러리 F# Data https://fsharp.github.io/FSharp.Data/ F# Data: Library for Data Access F# Data: Library for Data Access The F# Data library implements everything you need to access data in your F# applications and scripts. It contains F# type providers for working with structured file formats (CSV, HTML, JSON and XML) and for accessing the W fsharp.github.io HTML 파싱하려고 찾아본 라이브러리 HTML, CSV 등 다양한 데이터에 접근, 처리가 가능다..