Im haskell에 앱을 쓰는 중입니다. 사용자 입력이 괜찮습니까? 예를 들어 사용자 입력이 괜찮 으면 확인하는 것이 가장 좋습니다. 알고 싶습니다. 형성된 날짜? 정수에 대한 도움말사용자 입력 오류에 대한 haskell 검사
답변
간단한 방법에 대한
덕분에 "읽기"를 사용하는 것입니다.
type ReadS a = String -> [(a, String)]
reads :: (Read a) => ReadS a
아이디어는 읽기 클래스의 인스턴스 인 모든 유형의 당신은 그것에게 문자열을 전달하고 해당 유형으로 분석을 시도하는 것입니다 :이 유형이 있습니다. 예를 들어 정수 읽기의 인스턴스입니다, 그래서, 결과는 한 수에 항목과 나머지 문자열을 포함합니다 성공하면 당신은
reads :: String -> [(Integer, String)]
로 유형 생각할 수 있습니다. 그래서 예를
값을 얻고, 다음은 정수를 못해서 불평 acatch - 모든 패턴 일치를 위해 귀하의 경우 [(V, "")]에 불과 패턴 일치에 따라서reads "45xyz" = [(45, "xyz")]
합니다.
날짜가 더 복잡합니다. 형식을 정의한 다음 "읽기"를 사용하여 인식 할 수있는 비트로 나눕니다.
'reads'는 단지 하나의 엔트리 만 리턴한다고는 생각하지 않습니다. 가능한 여러 가지 구문을 반환 할 수 있습니다. 필자는 구현을 본 적이 없지만 Prelude의 형식 시그니처와 설명이 가능하다는 것을 분명히 암시합니다. 그러므로 나는 항상 @ Yitz의 maybeRead와 같은 함수를 사용한다. – MtnViewMark
그게 전부입니다. 그러나 정수의 경우 0 또는 1 구문만을 반환합니다. 예상되는 구문 분석에 일치하므로 오류가 발생합니다. –
저는 Parsec이 명령 행 옵션 일 때이 작업을하기를 좋아합니다. 명령 줄이 문자열이 아니라 문자열의 목록이라는 점을 감안할 때 어떻게해야합니까? 첫째, 당신은 (대신 Char
목록의) String
의 목록을 구문 분석에 대한 몇 가지 간단한 프리미티브를 작성해야 내가 하단에했던 것처럼
http://github.com/solidsnack/system-uuid/blob/master/Options.hs
그런 다음 당신이 당신의 옵션을 구문 분석하는 사람들을 작성할 수 있습니다 이 파일 :
http://github.com/solidsnack/system-uuid/blob/master/Main.hs
이 정말 그것을 할 수있는 가장 강력한 방법이며이 (모든 펄 프로그래머가 regexen에 있습니다만큼이나 무거운) 어떤 하스켈 프로그래머가 파서 콤비에서 만드는 무거운 투자를 활용합니다.
maybeRead
을 사용하십시오. 이 함수는 Haskell 라이브러리에 포함 된 의 후보이지만 에는 아직 포함되지 않았습니다. 그것을위한 코드를 포함하십시오.
import Data.Time
import Data.Maybe (listToMaybe)
import System.IO (hSetBuffering, BufferMode(NoBuffering), stdout)
main = do hSetBuffering stdout NoBuffering putStr "Enter an Int: " maybeInt <- fmap maybeRead getLine :: IO (Maybe Int) maybe (putStrLn "That's not an Int!") (putStrLn . ("The Int is " ++) . show) maybeInt putStr "Enter a date: " maybeDate <- fmap maybeRead getLine :: IO (Maybe Day) maybe (putStrLn "That's not a date!") (putStrLn . ("The date is " ++) . show) maybeDate
maybeRead :: Read a => String -> Maybe a maybeRead = fmap fst . listToMaybe . filter (null . snd) . reads
내가 그런 공백을 후행 수 있도록 다음과 같습니다 : 여기에 완벽한 솔루션입니다
import Data.Maybe
import Data.Char
maybeRead :: Read a => String -> Maybe a
maybeRead = fmap fst . listToMaybe . filter (null . dropWhile isSpace . snd) . reads
- 1. 사용자 입력 유효성 검사
- 2. 사용자 지정 오류에 대한 예외를 통해 전달
- 3. JQuery와 유효성 검사 플러그인 : 오류에 변경 요소가
- 4. Monotouch 사용자 입력 데이터 유효성 검사
- 5. 연결에 대한 자동 완성 입력 유효성 검사
- 6. ListView 오류에 대한 XML
- 7. 방법의 오류에 대한 과부하하지
- 8. 날짜에 대한 haskell 함수가 있습니까?
- 9. double/float에 대한 jQuery 입력 유효성 검사
- 10. 오류에 대한 암호 확인 작성
- 11. 클래스에 대한 사용자 입력 캡슐화
- 12. 이메일에 대한 사용자 입력 인코딩
- 13. java.util.Scanner에 대한 사용자 입력 에뮬레이트
- 14. Haskell 방법 abort가있는 여러 항목의 오류 검사
- 15. 바인딩 오류에 대한 모든 쿼리를 확인하는 방법
- 16. WCF의 로깅 오류에 대한 질문
- 17. .htaccess 오류에 대한 500 오류
- 18. 오류에 대한 정의를 중복 !: 'javax.bluetooth.BluetoothConnectionException'
- 19. 빌드 오류에 대한 도움이 필요하십니까
- 20. C++ 링커 오류에 대한 도움말
- 21. 장고 오류에 대한 장고 - 스핑크스
- 22. mysql 오류에 대한 도움이 필요합니다.
- 23. 링커 오류에 대한 도움 : .gnu.linkonce.t
- 24. 이 오류에 대한 모든 정보
- 25. 컴파일 타임 오류에 대한 질문
- 26. WPF의 입력 유효성 검사
- 27. ICEfaces ice : inputFile 파일 이름 유효성 검사 오류에 대한 메시지를 어떻게 설정합니까?
- 28. JQuery와 유효성 검사 password를 입력
- 29. Matlab - 입력 유효성 검사
- 30. 입력 유효성 검사 Silverlight
도 참조를 http://stackoverflow.com/questions/2933157/nill-value-in-haskell 그것은 그 이름에도 불구하고 같은 질문을하고있다. – MtnViewMark